OpenCV打开两个摄像头的问题

cmycu 2016-01-09 05:27:17
版本2.4.8,win7 64位,VS2010。
做双目视觉,把两个工业摄像机放一起,也就是有两个USB头,打开摄像头的时候出现以下问题:
要么就是只能打开一个摄像头,过一会儿报错;要么就直接报错,什么都没有。
下面是程序:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

int main()
{
//namedWindow("L_image",0);
//namedWindow("R_image",0);

VideoCapture cap1;
VideoCapture cap2;
cap1.open(0);
cap2.open(1);

double w = 320, h = 240;
cap1.set(CV_CAP_PROP_FRAME_WIDTH,w);
cap1.set(CV_CAP_PROP_FRAME_HEIGHT,h);
cap2.set(CV_CAP_PROP_FRAME_WIDTH,w);
cap2.set(CV_CAP_PROP_FRAME_HEIGHT,h);

if(!cap1.isOpened()) {cout<<"-1"<<endl;return -1;}
if(!cap2.isOpened()) {cout<<"-2"<<endl;return -2;}

Mat frame1,frame2;

while(1)
{
cap1>>frame1;
imshow("L_image",frame1);

cap2>>frame2;
imshow("R_image",frame2);

int c=waitKey(0);
if(c==' ') break;
}
return 0;
}
如果把其中一个摄像机相关的代码注释掉,那另一个可以正常显示。
代码跟大部分网上的几乎是完全一样了,不知道哪里出了问题,求指教!
...全文
3333 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-05-25
  • 打赏
  • 举报
回复
能用多进程操作多个资源,决不使用多线程或单线程循环操作多个资源。 这是原则问题。 《Unix编程艺术》
qq_23327301 2017-05-24
  • 打赏
  • 举报
回复
#include<opencv2\opencv.hpp> using namespace cv; int main() { VideoCapture cap(0); VideoCapture capture(1); while (1) { Mat A, B, C, D; cap >> A, B; imshow("2", A); cvtColor(A, B, CV_BGR2GRAY); imshow("1", B); waitKey(30); capture >> C, D; imshow("3", C); Canny(C, D, 0, 30, 3); imshow("4", D); waitKey(30); } } 这个可以正常使用,,, 但我想创建窗口来做个滑动条来控制时,一个可以用,另一个用不了,,,这是什么情况
qq_31432921 2016-11-21
  • 打赏
  • 举报
回复
您好,请问该问题您解决了吗。我遇到的情况跟您说的一样。 使用下面的代码,第2个摄像头没办法打开。 int _tmain(int argc, _TCHAR* argv[]) { VideoCapture capture(0); if( !capture.isOpened() ) std::cout << "Capture0 can't be opened\n" << std::endl; VideoCapture capture1(1); if( !capture1.isOpened() ) std::cout << "Capture1 can't be opened\n" << std::endl; return 0; }
赵4老师 2016-01-12
  • 打赏
  • 举报
回复
在我眼里,一个进程同时使用两个摄像头跟两个进程分别使用两个摄像头没有本质区别。
10km 2016-01-12
  • 打赏
  • 举报
回复
换台电脑试试吧 这事儿我去年遇到过 不是程序问题 同样的程序换了几台电脑跑 有的电脑可以同时以1208*720标清打开两个甚至3个摄像头 有的只能打开1路标清 但是分辨率改成640*480就能同时打开两路 结论就是USB总线带宽问题 是电脑的USB设备器件不行 传输带宽达不到同时开启两路视频的要求 现在的电脑主板都号称支持USB2.0 但制造商总会在你看不到的地方偷工减料 导致USB总线带宽不足
cmycu 2016-01-12
  • 打赏
  • 举报
回复
引用 1 楼 赵4老师的回复:
可以试试使用两个进程分别使用两个摄像头。
分别使用是可以的,但现在希望能够同时使用。这几天我发现把opevcv的版本换成3.0就能同时使用,不过我更希望能在2.4.x版本下同时调用两个摄像头,不知有什么解决方法呢?
赵4老师 2016-01-11
  • 打赏
  • 举报
回复
可以试试使用两个进程分别使用两个摄像头。

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧