使用OpENCV的2个相机的视频(用于立体声视觉),但其中一个是落后的
Video from 2 cameras (for Stereo Vision) using OpenCV, but one of them is lagging
我正在尝试使用2个Logitech C310网络摄像头创建立体声视觉。但是结果还不够好。与另一个视频相比,其中一个视频正在滞后。
这是我使用VC 2010的OpenCV程序:
#include <opencvcv.h>
#include <opencvhighgui.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视频关注实际上仅用于测试,它使用最简单的基础操作系统功能,并且并没有真正尝试做任何聪明的事情。
此外,即使您可以找到较低级别的API来与它们交谈,简单的网络摄像头也不能很好地控制同步。
如果您需要使用简单的USB网络摄像头进行项目,最简单的方法是在几个赫兹闪烁外部定时LED并检测每个相机中的光线并使用它来同步框架。
我知道这篇文章越来越老,但是我最近必须处理同样的问题,所以...
我认为您不饱和USB巴士。如果是,则应该在终端中有明确的消息。实际上,创建视频关注对象非常慢,我很确定这是您滞后的原因:您初始化了第一个视频关注对象CAP1,CAP1开始抓住帧,您初始化了第二个视频cap2,Cap2开始抓住帧,然后抓住框架,然后您开始从CAP1和CAP2获取帧,但是CAP1存储的第一帧比CAP2存储的框架更古老,因此...您有一个滞后。
如果您真的想使用openCV,该怎么办是添加一些线程:一个与左帧打交道,另一个用右帧进行处理,两者除了保存最后的帧外,什么都不做(所以您始终要处理仅使用最新框架)。如果您想获得框架,您只需要从这些线程中获取它们即可。
如果您需要在这里,我做了一些事情。
相关文章:
- 如何在 OpenCV 中将图像与另一个图像相关联
- OpenCV代码不会检测人脸的数量,也不会在脸周围放一个圆圈
- 访问和更改基于另一个图像的像素颜色-opencv c++
- OpenCV - 打开一个从C++到Python的XML文件
- Opencv,在图像中的对象周围绘制一个框
- 有没有办法拿一个opencv显示窗口并将其保存到GUI窗口?
- OPENCV C .在for循环中在不同的图像像素上绘制一个圆圈(应在每个循环运行时将图像打开)
- OpenCV:文件存储操作员">>"在一个项目中工作,但不在另一个项目中工作(在同一类上)
- Opencv C++ 声明一个类型为 uint8 的矩阵
- 将一个 OpenCV OutputArrayOfArrays 对象复制到另一个对象
- Qt Creator在链接到OpenCV时给了我一个错误
- OPENCV:为击中创建一个正方形结构元素
- OpenCV + QML(从另一个线程抓取帧)
- Opencv C++创建一个垫子
- 将一个点的坐标分配给另一个OpenCV C
- 另一个OpenCV / cvBlob和架构问题
- 是否有一个OpenCV版本链接到GStreamer 1.0
- 从QT资源中加载一个openCV Haarcascade
- 如何让 cmake 使用另一个 opencv 目录,而不是 ubuntu 中的系统目录?
- 在一个OpenCV中显示不同的窗口