求助关于opencv获取多个摄像头出错的问题,操作系统为ubuntu
系统是UBUNTU-11.04opencv版本是2.4.6.1摄像头是微星z301p两个USB摄像头用hub连接将两个摄像头视频同时显示到Qt界面中-----------...
系统是UBUNTU-11.04
opencv版本是2.4.6.1
摄像头是微星z301p
两个USB摄像头用hub连接
将两个摄像头视频同时显示到Qt界面中
-------------------------
打开摄像头代码:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465#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); }
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);
读摄像头代码
frame=cvQueryFrame(cam);
if(!frame)
{
qDebug("get frame1 error!");
return;
}
...
frame_2=cvQueryFrame(cam_2);
if(!frame_2)
{
qDebug("get frame2 error!");
return;
}
...
}
第一个摄像头有输出,第二个没有
程序打印输出:
HIGHGUI ERROR: V4L/V4L2: VIDIOC_CROPCAP
HIGHGUI ERROR: V4L/V4L2: VIDIOC_CROPCAP
VIDIOC_STREAMON: 输入/输出错误
get frame2 error!
VIDIOC_QBUF: 无效的参数
请教该问题如何解决 展开
opencv版本是2.4.6.1
摄像头是微星z301p
两个USB摄像头用hub连接
将两个摄像头视频同时显示到Qt界面中
-------------------------
打开摄像头代码:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465#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); }
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);
读摄像头代码
frame=cvQueryFrame(cam);
if(!frame)
{
qDebug("get frame1 error!");
return;
}
...
frame_2=cvQueryFrame(cam_2);
if(!frame_2)
{
qDebug("get frame2 error!");
return;
}
...
}
第一个摄像头有输出,第二个没有
程序打印输出:
HIGHGUI ERROR: V4L/V4L2: VIDIOC_CROPCAP
HIGHGUI ERROR: V4L/V4L2: VIDIOC_CROPCAP
VIDIOC_STREAMON: 输入/输出错误
get frame2 error!
VIDIOC_QBUF: 无效的参数
请教该问题如何解决 展开
1个回答
展开全部
看看用其他ubuntu下的软件能不能打开
不能打开就放弃,说明ubuntu就是不能用这样的摄像头,换成windows就能行了
能打开,说明你的代码有问题。
找不到代码有问题,可能你的水平不够,可能opencv有bug
opencv有bug的可能性非常小,我估计最后一定是你的代码有问题
你这代码贴在这儿,排版很差,谁愿意帮你看?至少贴到这儿:
另外opencv装在ubuntu11.04上是什么情况,11.04官方已经不支持了,现在13.04按照官方文档能直接安装使用。我的毕设就是在ubuntu13.04下使用python调用opencv,摄像头完全可以使用
追问
编辑时排版还好好的,发布成功就成这德行了,我的代码驱动一个摄像头是可以正常显示图像的,就是两个就出各种问题,11.04用了两年了,里面移植+安装了各种东西,一直想换却觉得麻烦,谢谢你了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询