qt显示通过opencv显示摄像头
2017-04-13 10:50
344 查看
qt显示通过opencv显示摄像头
做毕业设计实现这个功能时遇到博客中遇到的不使用imshow就不显示的问题,经过查找资料通过定时获取图像的方法解决了该问题。以下是主要实现方法 下载地址(qt5.8 vs2013 addin2.0)
头文件
#pragma once #include <QtWidgets/QMainWindow> #include <QMainWindow> #include <QMenu> #include <QMenuBar> #include <QStatusBar> #include <QLabel> #include "ui_stereovisondemo.h" #include <opencv2/opencv.hpp> using namespace cv; class stereovisondemo : public QMainWindow { Q_OBJECT public: stereovisondemo(QWidget *parent = Q_NULLPTR); private: Ui::stereovisondemoClass ui; private slots: void openCaptureClicked(); void showImage(); };
cpp
//#pragma execution_character_set("utf-8") #include "stereovisondemo.h" #include <opencv2/opencv.hpp> #include <iostream> #include <Windows.h> #include <QTimer> using namespace std; using namespace cv; QTimer *timer; QImage image; VideoCapture cap; Mat frame; void stereovisondemo::display(cv::Mat mat) { cv::Mat rgb; QImage img; if (mat.channels() == 3) { cv::cvtColor(mat, rgb, CV_BGR2RGB); img = QImage((const uchar*)(rgb.data), rgb.cols, rgb.rows, rgb.cols*rgb.channels(), QImage::Format_RGB888); } else { img = QImage((const uchar*)(mat.data), mat.cols, mat.rows, mat.cols*mat.channels(), QImage::Format_Indexed8); } ui.label1->clear(); ui.label1->setPixmap(QPixmap::fromImage(img)); ui.label1->resize(ui.label1->pixmap()->size()); ui.label1->show(); } QImage Mat2QImage(cv::Mat cvImg) { QImage qImg; if (cvImg.channels() == 3) //3 channels color image { cv::cvtColor(cvImg, cvImg, CV_BGR2RGB); qImg = QImage((const unsigned char*)(cvImg.data), cvImg.cols, cvImg.rows, cvImg.cols*cvImg.channels(), QImage::Format_RGB888); } else if (cvImg.channels() == 1) //grayscale image { qImg = QImage((const unsigned char*)(cvImg.data), cvImg.cols, cvImg.rows, cvImg.cols*cvImg.channels(), QImage::Format_Indexed8); } else { qImg = QImage((const unsigned char*)(cvImg.data), cvImg.cols, cvImg.rows, cvImg.cols*cvImg.channels(), QImage::Format_RGB888); } return qImg; } stereovisondemo::stereovisondemo(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); timer = new QTimer(this); /*信号和槽*/ connect(timer, SIGNAL(timeout()), this, SLOT(showImage())); // 时间到,读取当前摄像头信息 } void stereovisondemo::openCaptureClicked()//启动定时器 { timer->start(33); cap.open(0); } void stereovisondemo::showImage() { cap >> frame; image = Mat2QImage(frame); ui.label1->setPixmap(QPixmap::fromImage(image)); // 将图片显示到label上 }
相关文章推荐
- ubuntu下QT+OpenCV控制摄像头通过label 显示
- 在MFC中通过opencv显示摄像头视频或者文件视频
- QT+OPENCV摄像头的三种效果显示
- 在QT中通过摄像头动态显示图片
- 在MFC中通过opencv显示摄像头视频或者文件视频
- 【opencv学习之五】opencv调用摄像头用Qt的UI显示
- 在MFC中通过opencv显示摄像头视频或者文件视频
- 在MFC中通过opencv显示摄像头视频或者文件视频
- Android通过OpenCV获取摄像头帧数据并在悬浮框显示
- MFC 通过opencv打开摄像头 拍照后显示保存
- Zedboard摄像头获取视频设计问题篇(四)-OpenCV+QT配置显示图片
- 使用Qt+OpenCV+VideoInput 显示摄像头图像
- 基于DirectShow及Opencv的双摄像头显示(WIN7)
- Linux下使用QT调用opencv读取摄像头视频 调试心得
- Qt中用OpenCV2.4读取并把图像显示在QLabel中 (Ubuntu12.04)
- 利用opencv类库在MFC显示摄像头视频并且保存摄像头视频
- vs2008下opencv2.2的环境搭建及无法显示摄像头图像的bug解决
- 在QT中,通过QMessageBox类或者其他显示中文
- 在Qt的QGraphicsView中显示OpenCV的iplimage图片