您的位置:首页 > 编程语言 > Qt开发

linux下基于QT openCV两摄像头同时工作

2014-12-01 20:07 357 查看
两个摄像头同时工作在windows下很好实现。以为有现成的类可以调用,然而linux下却不怎么好用,做这方面的工作已经很久了,linux下单个摄像头也很好实现,当打开第二个摄像头的时候总是提示资源被占用,没有通道等信息,查阅资料发现是因为V4L2这个函数在调用时会申请全部的带宽,因此另一个摄像头便不能使用,所以我尝试打开一个摄像头截取一帧,然后关闭摄像头,打开另一摄像头的方法,循环调用,这样两个摄像头能同时打开,然而很明显一个问题就是两个摄像头的帧总是一前一后的!然而这梁摄像头总归是打开了,至于不怎么流畅的问题留待以后解决!

主要代码:

#include "widget.h"

#include "ui_widget.h"

Widget::Widget(QWidget *parent) :

QWidget(parent),

ui(new Ui::Widget)

{

ui->setupUi(this);

}

Widget::~Widget()

{

delete ui;

}

void Widget::on_pushButton_clicked()

{

while(1)

{

pCapture0 = cvCaptureFromCAM(200);

cvSetCaptureProperty(pCapture0,CV_CAP_PROP_FRAME_WIDTH,320);

cvSetCaptureProperty(pCapture0,CV_CAP_PROP_FRAME_HEIGHT,240);

pFrame0 = cvQueryFrame(pCapture0);

QImage image = QImage((const uchar*)pFrame0->imageData, pFrame0->width, pFrame0->height, QImage::Format_RGB888).rgbSwapped();

ui->label->setMinimumSize(320,240);

ui->label->setPixmap(QPixmap::fromImage(image));

cvReleaseCapture(&pCapture0);

cvWaitKey(1);

pCapture1 = cvCaptureFromCAM(201);

cvSetCaptureProperty(pCapture1,CV_CAP_PROP_FRAME_WIDTH,320);

cvSetCaptureProperty(pCapture1,CV_CAP_PROP_FRAME_HEIGHT,240);

pFrame1 = cvQueryFrame(pCapture1);

QImage image1 = QImage((const uchar*)pFrame1->imageData, pFrame1->width, pFrame1->height, QImage::Format_RGB888).rgbSwapped();

ui->label_2->setMinimumSize(320,240);

ui->label_2->setPixmap(QPixmap::fromImage(image1));

cvReleaseCapture(&pCapture1);

cvWaitKey(1);

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐