簡體   English   中英

使用OpenCV的2個攝像頭(用於立體視覺)的視頻,但其中一個是滯后的

[英]Video from 2 cameras (for Stereo Vision) using OpenCV, but one of them is lagging

我正在嘗試使用2個羅技C310網絡攝像頭創建立體視覺。 但結果還不夠好。 其中一個視頻與另一個視頻相比滯后。

這是我使用VC ++ 2010的openCV程序:

#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    try
    {
        VideoCapture cap1;
        VideoCapture cap2;

        cap1.open(0);
        cap1.set(CV_CAP_PROP_FRAME_WIDTH, 1040.0);
        cap1.set(CV_CAP_PROP_FRAME_HEIGHT, 920.0);

        cap2.open(1);  
        cap2.set(CV_CAP_PROP_FRAME_WIDTH, 1040.0);
        cap2.set(CV_CAP_PROP_FRAME_HEIGHT, 920.0);
        Mat frame,frame1;

        for (;;)
        {
            Mat frame;
            cap1 >> frame;

            Mat frame1;
            cap2 >> frame1;

            transpose(frame, frame);
            flip(frame, frame, 1);

            transpose(frame1, frame1);
            flip(frame1, frame1, 1);

            imshow("Img1", frame);
            imshow("Img2", frame1);

            if (waitKey(1) == 'q')
                break;
        }

        cap1.release();
        return 0;
    }
    catch (cv::Exception & e)
    {
        cout << e.what() << endl;
    }
}

我怎樣才能避免滯后?

你可能正在使usb公共汽車飽和。

嘗試將一個插在前面,另一個插在后面(希望降落在不同的公交車上),

或減小幀大小/ FPS以產生更少的流量。

我擔心你不能這樣做。 opencv Videocapture真的只是用於測試,它使用最簡單的底層操作系統功能,並沒有真正嘗試做任何聰明的事情。

此外,即使您可以找到較低級別的API與它們通信,簡單的網絡攝像頭也無法實現可同步控制。

如果您需要為項目使用簡單的USB網絡攝像頭,最簡單的方法是讓外部定時LED以幾赫茲閃爍並檢測每個攝像頭中的光並使用它來同步幀。

我知道這篇文章已經老了但我最近不得不處理同樣的問題所以......

我認為你沒有讓USB總線飽和。 如果你是,你應該在終端有一個明確的消息。 實際上,VideoCapture對象的創建速度很慢,我很確定這是你滯后的原因:你初始化你的第一個VideoCapture對象cap1,cap1開始抓取幀,你初始化你的第二個VideoCapture cap2,cap2開始抓取幀然后你開始從cap1和cap2獲取你的幀,但是cap1存儲的第一幀比cap2存儲的幀早,所以...你有一個滯后。

如果你真的想使用opencv那么你應該做的是添加一些線程:一個處理左幀而另一個處理右幀,除了保存最后一幀之外什么都不做(所以你總是處理最新的僅限幀)。 如果你想獲得你的幀,你只需要從這些線程中獲取它們。

我已經做了一些東西,如果你需要在這里

暫無
暫無

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

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