[英]OpenCV “stuck” frames with VideoCapture
我正在使用OpenCV 3.1,我嘗試運行一個簡單的代碼,如下所示(主要功能):
cv::VideoCapture cam;
cv::Mat matTestingNumbers;
cam.open(0);
if (!cam.isOpened()) { printf("--(!)Error opening video capture\n"); return -1; }
while (cam.read(matTestingNumbers))
{
cv::imshow("matTestingNumbers", matTestingNumbers);
cv::waitKey(5000);
}
當我移動攝像機時,代碼似乎沒有捕獲並顯示當前幀,而是顯示了從先前位置到新位置的所有捕獲幀。
因此,當我捕獲牆壁時,它會以正確的延遲顯示正確的幀(牆壁本身),但是,當我將相機扭轉到計算機上時,我首先看到牆壁的3幀,然后才看到計算機,框架卡住了。
我嘗試使用videoCapture.set()函數並將FPS設置為1,並嘗試將捕獲方法切換為cam >> matTestingNumbers(以及根據此更改的主要功能的其余部分),但沒有任何幫助,我仍然有“卡住”的幀。
順便說一句,這些是我在網上找到的解決方案。
我該怎么做才能解決此問題?
謝謝你,丹。
編輯:
我嘗試按以下方式檢索幀:
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int, char**)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
Mat frame;
namedWindow("edges",1);
for(;;)
{
cap.grab();
if (waitKey(11) >= 0)
{
cap.retrieve(frame);
imshow("edges", frame);
}
}
return 0;
}
但是,它給出了結果(當我將相機對准一個點並按下一個鍵時,它顯示了從另一點捕獲的先前的另一幀)。
就像您要先描繪一個人,然后又是另一個人,但是當您描繪第二個人時,卻得到了第一個人的照片,這是沒有意義的。
然后,我嘗試了以下方法:
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int, char**)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
Mat frame;
namedWindow("edges",1);
for(;;)
{
cap >> frame;
if (waitKey(33) >= 0)
imshow("edges", frame);
}
return 0;
}
它按預期工作。
問題之一是您沒有調用cv::waitKey(X)
來正確凍結窗口X毫秒。 擺脫usleep()
!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.