[英]OpenCV Video capture and fps problem
我正在MacOSX上使用OpenCV從網絡攝像頭捕獲視頻。 它可以正常工作,但是當我嘗試在QuickTime上播放捕獲的視頻時,播放速度太快。 即我從相機捕獲了10秒鍾,但是當我在QuickTime上播放時,視頻是2秒鍾。
我嘗試將fps從25更改為10,並且效果很好,但是我確定這不是正確的過程:
CvVideoWriter *writer = 0;
int isColor = 1;
int fps = 25;
int frameW = 640; // 744 for firewire cameras
int frameH = 480; // 480 for firewire cameras
問題是,現在我必須使用WebCam進行捕獲,但是程序的真正目的是從連接到Mac的任何外部源捕獲圖像。
我正在使用以下代碼捕獲:
for (;;) {
cvGrabFrame(capture)
image = cvRetrieveFrame(capture);
cvWriteFrame( writer, image );
}
有什么提示嗎? 我還在cvNamedWindow上顯示網絡攝像頭輸出,如何在此Windows中提高質量?
非常感謝大家!
安德烈!
可能是壓縮捕獲的視頻並將其保存到文件過於占用CPU。 如果真是這樣,那么您實際上只能在cvNamedWindow中看到10 FPS,並且僅將10 FPS寫入文件。 在文件中指定25 FPS將自然加快播放速度。
要查看這是否真的是您的問題,可以嘗試僅將圖像數據保存在內存中。 我還沒有嘗試過,但是我想您可以使用cvCloneImage()來做到這一點。
您也可以嘗試使用其他一些格式,但CPU開銷較低,以保存視頻:
CV_FOURCC('P','I','M','1') = MPEG-1 codec
CV_FOURCC('M','J','P','G') = motion-jpeg codec (does not work well)
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
我的性能與您提到的差不多(約10fps),並且發現連續的retrieveFrame()
調用將永遠占用時間。 我發現getCaptureProperty(CV_CAP_PROP_FPS)
的默認值為0。我使用setCaptureProperty(CV_CAP_PROP_FPS,25.0)
將該值更改為25 setCaptureProperty(CV_CAP_PROP_FPS,25.0)
並且能夠更快地捕獲。
使用cvCreateVideoWriter(filename, fourcc, fps, frame size, is color)
fps = 10
, fps = 20
和不同的值。 如果您已經知道來自相機的幀的fps值,請使用該值。
問題是您從相機獲得的每秒幀數更少,並且正在向視頻文件寫入更多幀
問候,薩利赫。
我確認10 fps是標准配置,盡管我相信這可能是因為您沒有一台能以10 fps以上的速度拍攝的相機(這很可能是問題所在)。
這仍然很奇怪,因為我使用的是waitkey(30)
,應該是33fps
,但是正好是10。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.