QT中VideoProbe的简介和实现
一、遇到問(wèn)題 在Android機(jī)上使用QT進(jìn)行圖像處理程序設(shè)計(jì)的時(shí)候,遇到的一個(gè)比較明顯的問(wèn)題就是圖片采集的問(wèn)題----攝像頭獲得是實(shí)時(shí)的視頻,如果我們想從中動(dòng)態(tài)地截獲圖片,并且轉(zhuǎn)換成Mat的格式,那么僅僅是靜態(tài)的imagecapturee就無(wú)法完成,必須要依靠VideoProbe機(jī)制。二、基本情況我們參考QT的相關(guān)文檔:QVideoProbe class允許你監(jiān)控正在播放或者記錄的視頻它的頭文件 #include<QVideoProbe>成員函數(shù)
qmake: QT+=multimedia
Inherits: QObjectPublic Functions
QVideoProbe(QObject*parent=Q_NULLPTR)
~QVideoProbe()
bool isActive()const
bool setSource(QMediaObject*source)
bool setSource(QMediaRecorder*mediaRecorder)
可以發(fā)出兩個(gè)信號(hào),其中比較重要的是后面一個(gè)videoFrameProbedvoid flush()
void videoFrameProbed(constQVideoFrame&frame)
基本例子,比如打開(kāi)視頻:QMediaPlayer*player=newQMediaPlayer();
QVideoProbe*probe=newQVideoProbe;
connect(probe, SIGNAL(videoFrameProbed(QVideoFrame)),this, SLOT(processFrame(QVideoFrame)));
probe->setSource(player);// Returns true, hopefully.
player->setVideoOutput(myVideoSurface);
player->setMedia(QUrl::fromLocalFile("observation.mp4"));
player->play();// Start receiving frames as they get presented to myVideoSurface
同樣可以打開(kāi)QCamera
三、編寫(xiě)代碼它的主要結(jié)構(gòu)(流程)是這樣的,我們創(chuàng)建QMl的代碼:在qml中生成camera和probe對(duì)象。這個(gè)probe對(duì)象是對(duì)原始QVideoProbe的重新封裝,原始的QVideoProbe在看的更清楚一些
在probe對(duì)象中,首先通過(guò)調(diào)用攝像頭,將videoframeprobed信號(hào)和processframe槽對(duì)應(yīng)起來(lái)。這樣一旦有視頻probed則自動(dòng)觸發(fā)processframe。注意在這行代碼中_camera=qvariant_cast<QCamera*>(_qmlCamera->property("mediaObject"));是c++調(diào)用qml對(duì)象的方法,是將qmlcamera強(qiáng)轉(zhuǎn)為qcamera的一句videoFrameProbed是自動(dòng)觸發(fā)的信號(hào),其結(jié)果將被processFrame截獲并處理。信號(hào)和槽的方式是可以直接帶變量傳遞的。在process中,最主要的步驟就是QVideoFrame格式和Mat格式的轉(zhuǎn)換。這個(gè)目前還沒(méi)有非常好的方法,只能在NoHandle模式下進(jìn)行灰度處理。但是對(duì)于圖像處理來(lái)說(shuō)已經(jīng)能夠解決一些問(wèn)題。需要注意的是,最后采集的結(jié)果,通過(guò)也就是的模式將其直接推送到qml這里
四、小結(jié)probe這種模式還是比較簡(jiǎn)單的,而且經(jīng)過(guò)封裝后能夠很好地和OpenCV結(jié)合起來(lái),用于圖像采集處理。
來(lái)自為知筆記(Wiz)
總結(jié)
以上是生活随笔為你收集整理的QT中VideoProbe的简介和实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MySQL基础入门学习【7】查询表达式解
- 下一篇: CentOS8英伟达显卡驱动的安装和卸载