qt中用opencv读取视频并抓取图像
来源:互联网 发布:ubuntu 16.04镜像文件 编辑:程序博客网 时间:2024/04/26 16:48
因为学习各种其他的事情耽搁了好久,终于又开始qt的学习了!因此我又来记录了……
这一次的学习是如何用opencv打开摄像头抓取视频,并实现采集图像的功能。
首先建立Qt Widgets Application,配置好opencv,如何配置在之前的博客中说过了。在编程之前,在ui界面上添加按钮和显示屏
请忽略我还没有对齐的两个label……我还没有学习如何对齐……
三个按钮的名称(objectName)分别改为OpenCameraBtn、TakePicBtn、CloseCameraBtn
然后是代码部分了。
mainwindow.h中,添加的部分:需要的头文件,信号槽、新定义的参数。
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QPaintEvent>#include <QTimer>#include <QPainter>#include <QPixmap>#include <QLabel>#include <QImage>#include <QDebug>#include <opencv.hpp>#include "ui_mainwindow.h"using namespace cv;namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow();private slots: void on_OpenCameraBtn_clicked(); void getFrame(); void on_TakePicBtn_clicked(); void on_CloseCameraBtn_clicked();private: Ui::MainWindow *ui; QImage *imag; CvCapture *capture;//highgui里提供的一个专门处理摄像头图像的结构体 IplImage *frame;//摄像头每次抓取的图像为一帧,使用该指针指向一帧图像的内存空间 QTimer *timer;//定时器用于定时取帧,上面说的隔一段时间就去取就是用这个实现};#endif // MAINWINDOW_H
然后是mainwindow.cpp中,添加的部分:参数初始化、信号槽的连接和三个按钮的功能实现函数。
#include "mainwindow.h"#include "ui_mainwindow.h"#include <opencv2/opencv.hpp>using namespace cv;MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); // 初始化 capture = NULL; timer = new QTimer(this); imag = new QImage(); /*信号和槽*/ connect(ui->OpenCameraBtn,SIGNAL(click()),this,SLOT(on_OpenCameraBtn_clicked()));//打开摄像头按钮 connect(timer, SIGNAL(timeout()), this, SLOT(getFrame()));//超时就读取当前摄像头信息 connect(ui->TakePicBtn,SIGNAL(click()),this,SLOT(on_TakePicBtn_clicked()));//拍照按钮}/****************************** ***********打开摄像头*********** *****************************/void MainWindow::on_OpenCameraBtn_clicked(){ capture = cvCreateCameraCapture(0);//打开摄像头,从摄像头中获取视频 if(capture==NULL) { qDebug()<<"error!"; } timer->start(50);//开始计时,超时则发出timeout()信号,1000为1秒,50毫秒取一帧}void MainWindow::getFrame(){ frame = cvQueryFrame(capture);//从摄像头中抓取并返回每一帧 // 将抓取到的帧,从IplImage格式转换为QImage格式,rgbSwapped是为了显示效果色彩好一些 //QImage::Format_RGB888不同的摄像头用不同的格式。 QImage image = QImage((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888).rgbSwapped(); ui->label->setPixmap(QPixmap::fromImage(image));//将视频显示到label上}/****************************** ***********拍照按钮************ *****************************/void MainWindow::on_TakePicBtn_clicked(){ frame = cvQueryFrame(capture);//从摄像头中抓取并返回每一帧 // 将抓取到的帧,从IplImage格式转换为QImage格式,rgbSwapped是为了显示效果色彩好一些 //QImage::Format_RGB888不同的摄像头用不同的格式。 QImage image = QImage((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888).rgbSwapped(); ui->label_2->setPixmap(QPixmap::fromImage(image));//将截取的图片显示到label2上}/****************************** ***********关闭摄像头*********** *****************************/void MainWindow::on_CloseCameraBtn_clicked(){ timer->stop(); //停止取帧 cvReleaseCapture(&capture); //释放资源}MainWindow::~MainWindow(){ delete ui;}
代码注释的很详细了哈,为了以后复习方便,现在麻烦一点也是值得的。
运行结果如下:
小胖手出境hiahia~
左边大一点的窗口是实时视频,右边小一点的窗口是点击拍照按钮后截取的图像(还是那句话,还不会对齐排版呢,我接下来就学它…)。当点击关闭摄像头按钮之后,视频那个窗口就定格在最后的显示画面了。
0 0
- qt中用opencv读取视频并抓取图像
- Opencv图像视频读取
- opencv图像读取,视频读取
- qt学习笔记(3)Qt、opencv、vs2010本地读取图像、反转图像并显示
- QT opencv 读取显示图像
- Opencv读取并播放视频
- 在QT集成开发环境中用OpenCV读取一张图片并显示
- opencv读取视频,存放视频图像
- OpenCV读取视频和图像序列
- 学习OPENCV之读取图像和视频
- OpenCV读取视频和图像序列
- OpenCV读取视频和图像序列
- opencv读取视频保存成图像
- 初学图像处理+opencv----读取视频
- Qt对话框显示opencv读取的图像
- 接上一篇:Ubuntu+QT+Opencv读取视频
- Qt+OpenCV摄像头读取保存回放视频
- OpenCV 读取文件并转换灰度图像
- 按键驱动——plat_button分析总结
- 四月十三
- 蓝丝雨第十四季商业实战系列《全民奇迹中控台实战》-收集整理视频教程
- 跨站的艺术-XSS Fuzzing 的技巧
- bzoj4659: Lcm
- qt中用opencv读取视频并抓取图像
- erlang实现堆
- Linux编程之PING的实现
- Algorithm Gossip (17) 长 PI
- 腾讯云数据库团队:PostgreSQL TOAST技术理解
- 手掌静脉识别——利用深度学习进行ROI的选取
- VS+VSS源代码管理_编辑时不自动签出
- Git commit message和工作流规范
- linux CentOS 7.2 服务器配置apache+mysql+php环境 (linux 系统下LAMP部署)