怎么使用opencv 连接多个摄像头

如何使用opencv 连接多个摄像头
系统是UBUNTU-11.04
opencv版本是2.4.6.1
摄像头是微星z301p
两个USB摄像头用hub连接
将两个摄像头视频同时显示到Qt界面中
-------------------------
代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

#include <QImage>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    cam=NULL;
    cam_2=NULL;
    timer=new QTimer(this);
    connect(timer,SIGNAL(timeout()),this,SLOT(readCamera()));
    connect(ui->open,SIGNAL(clicked()),this,SLOT(openCamera()));
    connect(ui->close,SIGNAL(clicked()),this,SLOT(closeCamera()));

}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::openCamera()
{
    cam=cvCaptureFromCAM(200);//CV_CAP_V4L2
    if(!cam)
    {
        qDebug("create camera1 capture error!");
    }
    cam_2=cvCaptureFromCAM(201);//CV_CAP_V4L2+1
    if(!cam_2)
    {
        qDebug("create camera2 capture error!");
    }
    timer->start(33);
}
void MainWindow::readCamera()
{

    frame_2=cvQueryFrame(cam_2);
    if(!frame_2)
    {
        qDebug("get frame2 error!");
        return;
    }
    QImage image_2=QImage((const uchar*)frame_2->imageData, frame_2->width, frame_2->height, QImage::Format_RGB888).rgbSwapped();//rgbSwapped()用于转换QImage对象从RGB->BGR
    ui->label_2->setPixmap(QPixmap::fromImage(image_2));

    frame=cvQueryFrame(cam);
    if(!frame)
    {
        qDebug("get frame1 error!");
        return;
    }
    QImage image=QImage((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888).rgbSwapped();//rgbSwapped()用于转换QImage对象从RGB->BGR
    ui->label->setPixmap(QPixmap::fromImage(image));
}

void MainWindow::closeCamera()
{
    timer->stop();
    cvReleaseCapture(&cam);
    cvReleaseCapture(&cam_2);
}

则开始后两个摄像图均无画面显示,并输出错误:
/root/Qtworkspace/TestOpenCv-build-desktop/TestOpenCv 启动中...
HIGHGUI ERROR: V4L/V4L2: VIDIOC_CROPCAP
HIGHGUI ERROR: V4L/V4L2: VIDIOC_CROPCAP
select timeout
select timeout
OpenCV Error: Assertion failed (buf.data && buf.isContinuous()) in imdecode_, file /root/package/opencv-2.4.6.1/modules/highgui/src/loadsave.cpp, line 307
terminate called after throwing an instance of 'cv::Exception'
  what():  /root/package/opencv-2.4.6.1/modules/highgui/src/loadsave.cpp:307: error: (-215) buf.data && buf.isContinuous() in function imdecode_

程序异常终止。

如果修改readCamera()函数为
void MainWindow::readCamera()
{
    frame=cvQueryFrame(cam);
    if(!frame)
    {
        qDebug("get frame1 error!");
        return;
    }
    QImage image=QImage((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888).rgbSwapped();//rgbSwapped()用于转换QImage对象从RGB->BGR
    ui->label->setPixmap(QPixmap::fromImage(image));

    frame_2=cvQueryFrame(cam_2);
    if(!frame_2)
    {
        qDebug("get frame2 error!");
        return;
    }
    QImage image_2=QImage((const uchar*)frame_2->imageData, frame_2->width, frame_2->height, QImage::Format_RGB888).rgbSwapped();//rgbSwapped()用于转换QImage对象从RGB->BGR
    ui->label_2->setPixmap(QPixmap::fromImage(image_2));


}

则第一个摄像头有输出,第二个没有
程序打印输出:
/root/Qtworkspace/TestOpenCv-build-desktop/TestOpenCv 启动中...
HIGHGUI ERROR: V4L/V4L2: VIDIOC_CROPCAP
HIGHGUI ERROR: V4L/V4L2: VIDIOC_CROPCAP
VIDIOC_STREAMON: 输入/输出错误
get frame2 error!
VIDIOC_QBUF: 无效的参数
get frame2 error!
VIDIOC_QBUF: 无效的参数
get frame2 error!

请教该问题如何解决

文章评论

怎么使用opencv 连接多个摄像头
老程序员的下场
怎么使用opencv 连接多个摄像头
程序员最害怕的5件事 你中招了吗?
怎么使用opencv 连接多个摄像头
为啥Android手机总会越用越慢?
怎么使用opencv 连接多个摄像头
Java程序员必看电影
怎么使用opencv 连接多个摄像头
看13位CEO、创始人和高管如何提高工作效率
怎么使用opencv 连接多个摄像头
编程语言是女人
怎么使用opencv 连接多个摄像头
5款最佳正则表达式编辑调试器
怎么使用opencv 连接多个摄像头
做程序猿的老婆应该注意的一些事情
怎么使用opencv 连接多个摄像头
团队中“技术大拿”并非越多越好
怎么使用opencv 连接多个摄像头
“肮脏的”IT工作排行榜
怎么使用opencv 连接多个摄像头
Java 与 .NET 的平台发展之争
怎么使用opencv 连接多个摄像头
我的丈夫是个程序员
怎么使用opencv 连接多个摄像头
Web开发者需具备的8个好习惯
怎么使用opencv 连接多个摄像头
每天工作4小时的程序员
怎么使用opencv 连接多个摄像头
那些争议最大的编程观点
怎么使用opencv 连接多个摄像头
“懒”出效率是程序员的美德
怎么使用opencv 连接多个摄像头
程序员的鄙视链
怎么使用opencv 连接多个摄像头
旅行,写作,编程
怎么使用opencv 连接多个摄像头
当下全球最炙手可热的八位少年创业者
怎么使用opencv 连接多个摄像头
写给自己也写给你 自己到底该何去何从
怎么使用opencv 连接多个摄像头
我跳槽是因为他们的显示器更大
怎么使用opencv 连接多个摄像头
程序员眼里IE浏览器是什么样的
怎么使用opencv 连接多个摄像头
一个程序员的时间管理
怎么使用opencv 连接多个摄像头
程序员的一天:一寸光阴一寸金
怎么使用opencv 连接多个摄像头
初级 vs 高级开发者 哪个性价比更高?
怎么使用opencv 连接多个摄像头
要嫁就嫁程序猿—钱多话少死的早
怎么使用opencv 连接多个摄像头
不懂技术不要对懂技术的人说这很容易实现
怎么使用opencv 连接多个摄像头
程序员和编码员之间的区别
怎么使用opencv 连接多个摄像头
为什么程序员都是夜猫子
怎么使用opencv 连接多个摄像头
老美怎么看待阿里赴美上市
怎么使用opencv 连接多个摄像头
程序员应该关注的一些事儿
怎么使用opencv 连接多个摄像头
程序员的样子
怎么使用opencv 连接多个摄像头
10个调试和排错的小建议
怎么使用opencv 连接多个摄像头
中美印日四国程序员比较
怎么使用opencv 连接多个摄像头
程序员都该阅读的书
怎么使用opencv 连接多个摄像头
聊聊HTTPS和SSL/TLS协议
怎么使用opencv 连接多个摄像头
程序员周末都喜欢做什么?
怎么使用opencv 连接多个摄像头
如何区分一个程序员是“老手“还是“新手“?
怎么使用opencv 连接多个摄像头
科技史上最臭名昭著的13大罪犯
怎么使用opencv 连接多个摄像头
鲜为人知的编程真相
怎么使用opencv 连接多个摄像头
如何成为一名黑客
怎么使用opencv 连接多个摄像头
程序员必看的十大电影
怎么使用opencv 连接多个摄像头
漫画:程序员的工作
怎么使用opencv 连接多个摄像头
十大编程算法助程序员走上高手之路
怎么使用opencv 连接多个摄像头
总结2014中国互联网十大段子