OpenCV在Qt中显示视频的两种方法

参考:http://blog.csdn.net/augusdi/article/details/8865541

代码如下:

注意,要在ui界面上放置一个“Vertical Layout”控件,调整到合适大小

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include <QtWidgets/QMainWindow>  
  2. #include <QPaintEvent>  
  3. #include <QTimer>  
  4. #include <QPainter>  
  5. #include <QPixmap>  
  6. #include <QLabel>  
  7. #include <QImage>  
  8. #include <opencv.hpp>  
  9. #include "ui_mainwindow.h"  
  10. using namespace cv;  
  11. class mainwindow : public QMainWindow  
  12. {  
  13.     Q_OBJECT  
  14.   
  15. public:  
  16.     mainwindow(QWidget *parent = 0);  
  17.     ~mainwindow();  
  18. public slots:  
  19.     void updateImage();  
  20. private:  
  21.   
  22.     QTimer theTimer;  
  23.     Mat srcImage;  
  24.     VideoCapture videoCap;  
  25.     QLabel *imageLabel;  
  26.   
  27.     Ui::mainwindowClass ui;  
  28.   
  29. protected:  
  30.     void paintEvent(QPaintEvent *e);  
  31. };  
[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. mainwindow::mainwindow(QWidget *parent)  
  2.     : QMainWindow(parent)  
  3. {  
  4.     ui.setupUi(this);  
  5.     connect(&theTimer, &QTimer::timeout, this, &mainwindow::updateImage);  
  6.     //从摄像头捕获视频  
  7.     if(videoCap.open(0))  
  8.     {  
  9.         srcImage = Mat::zeros(videoCap.get(CV_CAP_PROP_FRAME_HEIGHT), videoCap.get(CV_CAP_PROP_FRAME_WIDTH), CV_8UC3);  
  10.         theTimer.start(33);  
  11.     }  
  12.     //设置显示视频用的Label  
  13.     imageLabel = new QLabel(this);  
  14.     ui.verticalLayout->addWidget(imageLabel);  
  15. }  
  16.   
  17. mainwindow::~mainwindow()  
  18. {  
  19.       
  20. }  
  21.   
  22. void mainwindow::paintEvent(QPaintEvent *e)  
  23. {  
  24.     //显示方法一  
  25.     QPainter painter(this);  
  26.     QImage image1 = QImage((uchar*)(srcImage.data), srcImage.cols, srcImage.rows, QImage::Format_RGB888);  
  27.     painter.drawImage(QPoint(20,20), image1);  
  28.     //显示方法二  
  29.     QImage image2 = QImage((uchar*)(srcImage.data), srcImage.cols, srcImage.rows, QImage::Format_RGB888);  
  30.     imageLabel->setPixmap(QPixmap::fromImage(image2));  
  31.     imageLabel->resize(image2.size());  
  32.     imageLabel->show();  
  33. }  
  34.   
  35. void mainwindow::updateImage()  
  36. {  
  37.     videoCap>>srcImage;  
  38.     if(srcImage.data)  
  39.     {  
  40.         cvtColor(srcImage, srcImage, CV_BGR2RGB);//Qt中支持的是RGB图像, OpenCV中支持的是BGR  
  41.         this->update();  //发送刷新消息  
  42.     }  
  43. }  

演示结果



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值