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