Qt下使用OpenCV捕获摄像头
来源:互联网 发布:淘宝开网店指导靠谱吗 编辑:程序博客网 时间:2024/05/20 01:10
在Qt下没有专门的视频采集与播放工具。这里使用了OpenCV所带的库函数捕获摄像头的视频图像。这里要注意的是Qt的图像格式是RGB格式,而OpenCV的格式是BGR,所以要进行颜色通道的转换,用到了OpenCV的库函数:cvtColor函数。
Qt的图像存储格式是QImage类,而OpenCV的图像格式是Mat,所以要进行转换:
Mat image = imread("1.jpg");//改变颜色通道的顺序cv::cvtColor(image, image, CV_BGR2RGB);//Qt图像QImage img = QImage((const unsigned char*)(image.data), image.cols, image.rows, QImage::Format_RGB888);//显示在label中ui->label->setPixmap(QPixmap::fromImage(img)); //将QImage 格式转换成 QPixmap格式用于绘制图像
新建一个Qt GUI应用,建立一个新类CameraGet,继承QWidget类。创建的GUI界面如下:
CameraGet类的头文件如下:
#ifndef CAMERAGET_H#define CAMERAGET_H#include <QWidget>#include <QImage>#include <QPixmap>#include <QTimer>#include <opencv2/opencv.hpp>namespace Ui { class CameraGet;}class CameraGet : public QWidget{ Q_OBJECTpublic: explicit CameraGet(QWidget *parent = 0); ~CameraGet();public slots: void openCamera(); //打开摄像头 void readFrame(); //读取当前帧信息 void closeCamera(); //关闭摄像头 void takingPictures(); //拍照private: Ui::CameraGet *ui; QTimer *timer; QImage qimage; //q开头表示Qt的图像格式 cv::VideoCapture capture; cv::Mat cvframe; //cv开头表示是OpenCv的图像格式};#endif // CAMERAGET_H
CameraGet类的实现文件:
#include "cameraget.h"#include "ui_cameraget.h"CameraGet::CameraGet(QWidget *parent) : QWidget(parent), ui(new Ui::CameraGet){ ui->setupUi(this); timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(readFrame())); connect(ui->openCam, SIGNAL(clicked()),this, SLOT(openCamera())); connect(ui->tackingPic, SIGNAL(clicked()), this, SLOT(takingPictures())); connect(ui->closeCam, SIGNAL(clicked()), this, SLOT(closeCamera()));}CameraGet::~CameraGet(){ delete ui;}//打开摄像头void CameraGet::openCamera(){ capture = cv::VideoCapture(0); timer->start(33);}//读取摄像头信息void CameraGet::readFrame(){ //捕获摄像头一帧图像 capture >> cvframe; //颜色通道转换 cv::cvtColor(cvframe, cvframe, CV_BGR2RGB); //获取QImage格式的图像 qimage = QImage((const uchar*)(cvframe.data), cvframe.cols, cvframe.rows, QImage::Format_RGB888); //将图像显示在label中, 之前要把QImage格式的图像转换成QPixmap格式 ui->label->setPixmap(QPixmap::fromImage(qimage));}//拍照void CameraGet::takingPictures(){ ui->label_2->setPixmap(QPixmap::fromImage(qimage));}//关闭摄像头void CameraGet::closeCamera(){ timer->stop(); capture.release();}
演示结果:
- Qt下使用OpenCV捕获摄像头
- opencv下使用摄像头
- OpenCV摄像头捕获
- ubuntu下基于qt+opencv控制摄像头
- ubuntu下基于qt+opencv控制摄像头
- ubuntu下基于qt+opencv控制摄像头
- Qt下openCV实现摄像头拍照功能
- Qt/Linux 下的摄像头捕获(Video4Linux2)
- Qt/Linux 下的摄像头捕获(Video4Linux2)
- Qt/Linux 下的摄像头捕获(Video4Linux2)
- Qt/Linux 下的摄像头捕获(Video4L…
- Qt/Linux 下的摄像头捕获(Video4L…
- Qt/Linux 下的摄像头捕获(Video4Linux2)
- 使用Qt+OpenCV+VideoInput 显示摄像头图像
- OpenCV使用VideoInput库从摄像头捕获视频
- OpenCV使用VideoInput库从摄像头捕获视频
- python opencv 使用摄像头捕获视频并显示
- OpenCV捕获视频和摄像头
- 数据库开发之【ASP.NET页面级别的事务】
- 数字图像处理,BMP图像操作( biWidth*biBitCount+31)/32*4
- java中的lock和synchronized区别是什么
- 将低版本的项目转换到VS2010后“无法启动程序”的问题
- 学习泛型方法的两个小心得
- Qt下使用OpenCV捕获摄像头
- Mapreduce 框架解析
- typedef用法总结
- c++, char ,用法, 结构中的 字符数组
- C/C++ 分割字符串的多种方式
- jQuery实现全选、反选、全不选效果
- 公有云和私有云的区别
- UILable的常用用法
- 数据库关系代数表达式学习