OpenCV中文网站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 安装 配置
查看: 6175|回复: 11

请教opencv能同时打开3个USB摄像头,但4个不能同时打开?

[复制链接]
发表于 2015-1-18 16:30:36 | 显示全部楼层 |阅读模式
本帖最后由 HJS 于 2015-1-18 16:33 编辑

系统是XP,opencv2.4.10+vs2010英文版配置。
在台式机电脑上外界4个USB广角摄像头,但画面只有3个出来,第四个绿屏;我跟踪代码,发现每个摄像头都读出来了的,而且每个摄像头的每帧都有数据。请问这是什么原因?有人遇到吗?我看网上有人这样也打开了四个摄像头。代码如下:
#include<stdlib.h>
#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>

using namespace cv;
int main(void)
{
       char *window1 = "摄像头1";
       char *window2 = "摄像头2";
       char *window3 = "摄像头3";
       char *window4 = "摄像头4";
       char c = 0;

       CvCapture *capture1 = cvCreateCameraCapture(3);
       CvCapture *capture2 = cvCreateCameraCapture(2);
       CvCapture *capture3 = cvCreateCameraCapture(1);
       CvCapture *capture4 = cvCreateCameraCapture(0);

       IplImage *frame1, *frame2, *frame3, *frame4;
       cvNamedWindow(window1, 0);
       cvNamedWindow(window2, 0);
       cvNamedWindow(window3, 0);
       cvNamedWindow(window4, 0);

       while(1)
       {
                frame1 = cvQueryFrame(capture1);//捕获摄像头一帧视频画面
                if (!frame1)
                {
                        printf("摄像头1有问题!\n");
                        break;
                }
                frame2 = cvQueryFrame(capture2);//捕获摄像头一帧视频画面
                if (!frame2)
               {
                        printf("摄像头2有问题!\n");
                        break;
                }
                frame3 = cvQueryFrame(capture3);//捕获摄像头一帧视频画面
                if (!frame3)
                {
                        printf("摄像头3有问题!\n");
                        break;
                }
                frame4 = cvQueryFrame(capture4);//捕获摄像头一帧视频画面
                if (!frame4)
                {
                        printf("摄像头4有问题!\n");
                        break;
                }

                cvShowImage(window3, frame3);
                cvShowImage(window1, frame1);
                cvShowImage(window2, frame2);
                cvShowImage(window4, frame4);
                c = cvWaitKey(30);
                if (c == 27)//Esc键退出
                {
                        break;
                }
       }
       cvReleaseCapture(&capture1);
       cvReleaseCapture(&capture2);
       cvReleaseCapture(&capture3);
       cvReleaseCapture(&capture4);
       cvDestroyWindow(window1);
       cvDestroyWindow(window2);
       cvDestroyWindow(window3);
       cvDestroyWindow(window4);
       return 0;
}



效果图片

效果图片
回复

使用道具 举报

发表于 2015-1-18 17:00:45 | 显示全部楼层
2个摄像头我是试过的,4个没试过喔
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-18 17:04:51 | 显示全部楼层
深流水静水流深 发表于 2015-1-18 17:00
2个摄像头我是试过的,4个没试过喔


在我本人的电脑上能同时打开笔记本内置摄像头+1个USB摄像头,在别人电脑上能同时打开笔记本内置摄像头+2个USB摄像头,在台式机上能同时打开3个USB摄像头。我也被搞迷茫了,都是一样的代码和工程配置,难道是电脑的问题?
回复 支持 反对

使用道具 举报

发表于 2015-1-19 08:15:33 | 显示全部楼层
HJS 发表于 2015-1-18 17:04
在我本人的电脑上能同时打开笔记本内置摄像头+1个USB摄像头,在别人电脑上能同时打开笔记本内置摄像头+2 ...

其实就算是XP系统,也可以拿系统自带的资源管理器进行试验
只要驱动具备,资源管理器能够识别,那么自己编写的OpenCV程序,应该也能识别
我当时实践时用的就是2个USB的摄像头
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-19 16:08:45 | 显示全部楼层
lcg111111 发表于 2015-1-19 08:46
在2.4.10的Highgui中有个VideoCapture类,你试试看看,其中集成了VideoInput。
麻烦你测试测试下面的代码; ...

谢谢你的回复,我试过你的办法,用VideoCapture的核心应该是框起来的语句,但是还是只能打开三个,以下是我的代码和效果,不知你有什么想法?
1.png
2.png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-19 19:09:23 | 显示全部楼层
本帖最后由 HJS 于 2015-1-19 19:11 编辑
lcg111111 发表于 2015-1-19 16:41
这样声明看看:
VideoCapture vcap4(CV_CAP_DSHOW+3);
VideoCapture vcap3(CV_CAP_DSHOW+2);
这里有问题:
VideoCapture vcap1(CV_CAP_DSHOW+0);
vcap1.isOpended();                                      //返回值为0,也就是说打开失败了,其余摄像头都是正确的。
我觉得可能是摄像头的序号(索引值)导致的,也就是说不存在编号为:CV_CAP_DSHOW+0的摄像头。不知道有没有道理?该如何读取所有摄像头的编号?【摄像头是好的,单独打开都可以用】

1.png
回复 支持 反对

使用道具 举报

发表于 2015-1-19 20:39:45 | 显示全部楼层
HJS 发表于 2015-1-19 19:09
这里有问题:
VideoCapture vcap1(CV_CAP_DSHOW+0);
vcap1.isOpended();                                  ...

C语言版的学习opencv书上好像有说cvCreateCameraCapture(-1)时可以查看摄像头的编号的么?此时会弹出一个选择摄像头的选择(对话框吧)。。。你去试试吧,我还没接触视频这块呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-19 21:40:41 | 显示全部楼层
OpenCV_Westin 发表于 2015-1-19 20:39
C语言版的学习opencv书上好像有说cvCreateCameraCapture(-1)时可以查看摄像头的编号的么?此时会弹出一 ...

没有具体的编号,那个弹出的框都是:
USB视频设备
USB视频设备
USB视频设备
USB视频设备
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-1 18:27:23 | 显示全部楼层
lcg111111 发表于 2015-1-30 18:15
前几天在哪看到篇文章,说的是USB连接的数量的问题,具体不清楚了,以USB2.0为例,USB摄像头一般都是USB2.0 ...

谢谢你的建议。我认为就是USB带宽不足,但电脑上USB主接口不够了。我目前的解决办法是两台电脑来驱动,网线直连方式传数据来实现个摄像头的画面采集,以解燃眉之急。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-21 14:35:28 | 显示全部楼层
机缘巧合,实验室来了一台服务器,今天在上面配置了opencv环境,测试例程就用的本帖代码,结果TMD四个摄像头都可以使用了,一跑就通了,顿时就不爽了。
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|blog|OpenCV中文网站 ( 粤ICP备13079875号-2

GMT+8, 2018-8-22 01:24 , Processed in 0.031631 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表