QT中VideoProbe的简介和实现
生活随笔
收集整理的這篇文章主要介紹了
QT中VideoProbe的简介和实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、遇到問題 ? ? ? ?在Android機上使用QT進行圖像處理程序設計的時候,遇到的一個比較明顯的問題就是圖片采集的問題----攝像頭獲得是實時的視頻,如果我們想從中動態地截獲圖片,并且轉換成Mat的格式,那么僅僅是靜態的imagecapturee就無法完成,必須要依靠VideoProbe機制。 二、基本情況 我們參考QT的相關文檔: QVideoProbe class允許你監控正在播放或者記錄的視頻 它的頭文件 #include?<QVideoProbe>
qmake:??? QT?+=?multimedia
Inherits:??? QObject 成員函數 Public Functions
??? QVideoProbe(QObject?*parent?=?Q_NULLPTR)
????~QVideoProbe()
bool???? isActive()?const
bool???? setSource(QMediaObject?*source)
bool???? setSource(QMediaRecorder?*mediaRecorder)
可以發出兩個信號,其中比較重要的是后面一個videoFrameProbed void???? flush()
void???? videoFrameProbed(const?QVideoFrame?&frame)
? 基本例子,比如打開視頻:
QMediaPlayer?*player?=?new?QMediaPlayer();
QVideoProbe?*probe?=?new?QVideoProbe;
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
同樣可以打開QCamera
三、編寫代碼 它的主要結構(流程)是這樣的,我們創建QMl的代碼: 在qml中生成camera和probe對象。這個probe對象是對原始QVideoProbe的重新封裝,原始的QVideoProbe在 看的更清楚一些
在probe對象中,首先通過調用攝像頭,將videoframeprobed信號和processframe槽對應起來。這樣一旦有視頻probed則自動觸發processframe。 注意在這行代碼中 _camera?=?qvariant_cast<QCamera*>(_qmlCamera->property("mediaObject")); 是c++調用qml對象的方法,是將qmlcamera強轉為qcamera的一句 videoFrameProbed是自動觸發的信號,其結果將被processFrame截獲并處理。信號和槽的方式是可以直接帶變量傳遞的。 在process中,最主要的步驟就是QVideoFrame格式和Mat格式的轉換。這個目前還沒有非常好的方法,只能在NoHandle模式下進行灰度處理。但是對于圖像處理來說已經能夠解決一些問題。需要注意的是,最后采集的結果,通過 也就是 的模式將其直接推送到qml這里
四、小結 probe這種模式還是比較簡單的,而且經過封裝后能夠很好地和OpenCV結合起來,用于圖像采集處理。
來自為知筆記(Wiz)
目前方向:圖像拼接融合、圖像識別 聯系方式:jsxyhelu@foxmail.com 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
qmake:??? QT?+=?multimedia
Inherits:??? QObject 成員函數 Public Functions
??? QVideoProbe(QObject?*parent?=?Q_NULLPTR)
????~QVideoProbe()
bool???? isActive()?const
bool???? setSource(QMediaObject?*source)
bool???? setSource(QMediaRecorder?*mediaRecorder)
可以發出兩個信號,其中比較重要的是后面一個videoFrameProbed void???? flush()
void???? videoFrameProbed(const?QVideoFrame?&frame)
? 基本例子,比如打開視頻:
QMediaPlayer?*player?=?new?QMediaPlayer();
QVideoProbe?*probe?=?new?QVideoProbe;
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
同樣可以打開QCamera
三、編寫代碼 它的主要結構(流程)是這樣的,我們創建QMl的代碼: 在qml中生成camera和probe對象。這個probe對象是對原始QVideoProbe的重新封裝,原始的QVideoProbe在 看的更清楚一些
在probe對象中,首先通過調用攝像頭,將videoframeprobed信號和processframe槽對應起來。這樣一旦有視頻probed則自動觸發processframe。 注意在這行代碼中 _camera?=?qvariant_cast<QCamera*>(_qmlCamera->property("mediaObject")); 是c++調用qml對象的方法,是將qmlcamera強轉為qcamera的一句 videoFrameProbed是自動觸發的信號,其結果將被processFrame截獲并處理。信號和槽的方式是可以直接帶變量傳遞的。 在process中,最主要的步驟就是QVideoFrame格式和Mat格式的轉換。這個目前還沒有非常好的方法,只能在NoHandle模式下進行灰度處理。但是對于圖像處理來說已經能夠解決一些問題。需要注意的是,最后采集的結果,通過 也就是 的模式將其直接推送到qml這里
四、小結 probe這種模式還是比較簡單的,而且經過封裝后能夠很好地和OpenCV結合起來,用于圖像采集處理。
來自為知筆記(Wiz)
目前方向:圖像拼接融合、圖像識別 聯系方式:jsxyhelu@foxmail.com 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的QT中VideoProbe的简介和实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CDN的强大功能
- 下一篇: linux内存回收机制