Opencv讀取攝像頭卡頓

                                      Opencv讀取攝像頭卡頓

開發環境:Win10系統,羅技HD1080p高清攝像頭,UE4_21,VS2017

開發原理:多線程中通過OpenCV對攝像頭進行高清採集(1920*1080),然後顯示到UMG中。

遇到問題:在2k採集模式下,畫面卡頓厲害。

 

猜想1:是不是卡在採集後的圖像cv::Mat往UTexture2D*填入時的問題,畢竟1920*1080個像素的拷貝。

實踐:減小採集分辨率(640*480),然後cv::resize到1920*1080,再拷貝到1920*1080的UTexture2D* 中

結果:視頻非常流暢,那麼可以斷言,跟圖像據拷貝到UTexture2D*中這一步,就沒關係了

 

猜想2:是不是攝像頭採集的問題。有大佬說了,很多攝像頭,在高分辨率的情況下都不到15幀,以MJPG格式解碼能達到30幀。

實踐:這一步當然去網上搜颳了。

         原理篇參閱Jetson TX1開發筆記(六):V4L2+OpenCV3.1以MJPG格式讀取USB攝像頭圖像並實時顯示

         https://blog.csdn.net/c406495762/article/details/72732135

大致意思是這樣的,該攝像頭的YUV2輸出格式只有一種640 x 480分辨率,而輸出格式爲MJPG有多種分辨率,如果想實現高清採集,需要通過MJPG格式進行採集。

那麼,怎麼設置採集模式呢?

毫無疑問,肯定在設置裏面。看看網上大佬是怎麼表演的吧。

     Python opencv 調用攝像頭時設置以MJPG等編碼格式獲取視頻

     https://blog.csdn.net/qq_38392644/article/details/85197264

(下面引用上篇博客,轉C++實現)

使用opencv讀取和設置攝像頭或視頻屬性代碼如下。 

cv::VideoCapture cap;
cap.set(proID, value)
cap.get(proID)

其中,propId 的值爲 0 - 18,19個值並不是每個都可以進行修改,每個值對應的屬性以及功能如下如下: 

參數 功能/意義
CV_CAP_PROP_POS_MSEC 0 視頻文件的當前位置(以毫秒爲單位)或視頻捕獲時間戳
CV_CAP_PROP_POS_FRAMES 1 基於0的索引將被解碼/捕獲下一幀
CV_CAP_PROP_POS_AVI_RATIO 2 視頻文件相對位置:0 - 電影的開始,電影的1 - 結束
CV_CAP_PROP_FRAME_WIDTH 3 視頻裏每一幀的寬
CV_CAP_PROP_FRAME_HEIGHT 4 視頻裏每一幀的高
CV_CAP_PROP_FPS 5 視頻的幀速
CV_CAP_PROP_FOURCC 6 4個字符表示的視頻編碼器格式
CV_CAP_PROP_FRAME_COUNT 7 視頻的幀數
CV_CAP_PROP_FORMAT 8 byretrieve()返回的Mat對象的格式
CV_CAP_PROP_MODE 9 指示當前捕獲模式的後端特定值
CV_CAP_PROP_BRIGHTNESS 10 圖像的亮度(僅適用於相機)
CV_CAP_PROP_CONTRAST 11 圖像對比度(僅適用於相機)
CV_CAP_PROP_SATURATION 12 圖像的飽和度(僅適用於相機)
CV_CAP_PROP_HUE 13 圖像的色相(僅適用於相機)
CV_CAP_PROP_GAIN 14 圖像的增益(僅適用於相機)
CV_CAP_PROP_EXPOSURE 15 曝光(僅適用於相機)
CV_CAP_PROP_CONVERT_RGB 16 表示圖像是否應轉換爲RGB的布爾標誌
CV_CAP_PROP_WHITE_BALANCE 17 目前不支持
CV_CAP_PROP_RECTIFICATION 18 立體攝像機的整流標誌(注意:只有當前支持DC1394 v 2.x後端)
//1.打開攝像機設備(默認第一個)
cv::VideoCapture cap= cv::VideoCapture(0);
//2.一定要先設置採集格式!!!
cap.set(CV_CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G'));
//3.然後再設置高清採集分辨率
cap.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);

結果:流暢地一筆,自己去感受

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章