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);
}
}
主要代码:
#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);
}
}
相关文章推荐
- linux下openCV两摄像头同时工作---基于树莓派3
- Linux下基于XScale的USB摄像头图像采集
- 基于Linux内核SPI子系统工作机制
- 基于S3C2440的Linux-3.6.6移植——基于UVC的USB摄像头移植及视频显示
- Linux管理工作,实例讲解工作中使用ssh证书登录的实际流程,讲解ssh证书登录的配置原理,基于配置原理,解决实际工作中,windows下使用SecureCRT证书登录的各种问题,以及实现hadoo
- VS2012+opencv3.0.0beta多个摄像头同时工作
- 基于嵌入式linux的usb摄像头的驱动及采集程序的实现
- 基于Linux 3.0.8 Samsung FIMC(S5PV210) 的摄像头驱动框架解读(一)
- 基于linux-2.6.35的网络视频服务器移植和ZC301摄像头的驱动支持
- Linux下基于OpenCV的摄像头数据采集与传输
- 多摄像头同时工作搜集
- OpenCV学习笔记(6)基于 VC+OpenCV+DirectShow 的多个摄像头同步工作
- 基于dm2410开发板的linux移植工作继续(2)
- 基于linux内核SPI子系统工作机制
- 基于Linux 3.0.8 Samsung FIMC(S5PV210) 的摄像头驱动框架解读(一)
- OpenCV学习笔记(6)基于 VC+OpenCV+DirectShow 的多个摄像头同步工作
- 基于Linux内核SPI子系统工作机制
- 基于ShareKit2.0的版本,修改了Sina和Twitter的实现,支持同时发送URL和IMAGE,由于和原来的接口有所不同,所以开个分支。特别感谢icyleaf的工作基础
- 基于Linux内核SPI子系统工作机制
- 基于S3C2440的Linux-3.6.6移植——基于UVC的USB摄像头移植及视频显示