Opencv讀取攝像頭卡頓

                                      Opencv讀取攝像頭卡頓

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

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

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

 

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

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

結果:視頻很是流暢,那麼能夠斷言,跟圖像據拷貝到UTexture2D*中這一步,就不要緊了.net

 

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

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

         原理篇參閱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);

結果:流暢地一筆,本身去感覺