簡體   English   中英

OpenCV與視頻捕捉“卡住”幀

[英]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.

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