簡體   English   中英

OpenCV視頻捕獲和fps問題

[英]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 = 10fps = 20和不同的值。 如果您已經知道來自相機的幀的fps值,請使用該值。

問題是您從相機獲得的每秒幀數更少,並且正在向視頻文件寫入更多幀

問候,薩利赫。

我確認10 fps是標准配置,盡管我相信這可能是因為您沒有一台能以10 fps以上的速度拍攝的相機(這很可能是問題所在)。

這仍然很奇怪,因為我使用的是waitkey(30) ,應該是33fps ,但是正好是10。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM