opencv攝像頭閃退問題總結,解決一閃而過的問題
opencv攝像頭閃退問題總結,解決播放視訊時一閃而過的問題
總結:
1.視訊解碼問題
出現這種情況一般是你的電腦裡缺少XviD codec(視訊編解碼器),也就是opencv開啟視訊之前必須將視訊解碼以得到可處理的資料,因此解決方案:
2.攝像頭反應慢問題
以下方法之一(二選一):
1.在視訊顯示的while裡,加入Sleep(300); //Sleep函式包含在windows.h裡,注意大寫
2.設定每幀顯示的時長,waitKey(30)就代表30ms顯示一幀。通常也是放在while迴圈裡,一般放在imread()等具有顯示作用的函式後面
3.waitKey返回值問題
waitkey(30) 如果不按鍵的時候是返回 oxff,這個無符號就是255,有符號就是-1
windows vs 的環境默認了這個為非符號數 即255
解決方案:把原始程式碼中迴圈讀取幀的
if (waitKey(30)>=0) break;
改為
if (waitKey(30) != 255) break;
或者把waitkey的返回值用有符號數去讀取。
4.動態連結庫DLL的問題
把 opencv_ffmpeg_64.dll位於{opencv}\sources\3rdparty\ffmpeg 和
opencv_ffmpegxxx_64.dll位於{opencv}\build\x64\vc15\bin
複製到了專案檔案下(xxx表示你當前的opencv版本,同理64和32對應著你的平臺是64位 or 32位)
官方提示:
來自OpenCV官網手冊
http://docs.opencv.org/2.4/modules/highgui/doc/user_interface.html?highlight=waitkey
Note:
This function(imshow) should be followed by waitKey function which displays the image for specified milliseconds. Otherwise, it won’t display the image. For example, waitKey(0) will display the window infinitely until any keypress (it is suitable for image display). waitKey(25) will display a frame for 25 ms, after which display will be automatically closed. (If you put it in a loop to read videos, it will display the video frame-by-frame)
最後,希望大家儘量用c++版的opencv(2.0及以上),少用c語言版的。各取所需,希望幫助到大家!
參考部落格: