#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
//新添加
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <QFileDialog>
#include <QImage>
#include <QTimer>     // 设置采集数据的间隔时间
using namespace cv;
//helper函数
QPixmap Mat2QImage(Mat src);

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();
    void on_pushButton_2_clicked();
    void on_pushButton_3_clicked();
    void readFarme();       // 读取当前帧信息
    void on_pushButton_4_clicked();

private:
    Ui::MainWindow *ui;
    QTimer    *timer;
    QImage    *imag;
    VideoCapture *videocapture;   // 视频获取结构, 用来作为视频获取函数的一个参数
    Mat          matFrame;        //申请IplImage类型指针,就是申请内存空间来存放每一帧图像

    bool      bMethod;//是否使用算法

};

#endif // MAINWINDOW_H


#include "mainwindow.h"
#include "ui_mainwindow.h"

using namespace cv;
//全局变量
Mat src;
Mat gray;
Mat tmp;
Mat dst;

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    timer   = new QTimer(this);
    imag    = new QImage();         // 初始化
    connect(timer, SIGNAL(timeout()), this, SLOT(readFarme()));  // 时间到,读取当前摄像头信息
    bMethod = false;//是否使用算法
}

MainWindow::~MainWindow()
{
    delete ui;
}

//事件驱动

//打开摄像头
void MainWindow::on_pushButton_clicked()
{
    //打开摄像头,从摄像头中获取视频
    videocapture  = new VideoCapture(0);
    // 开始计时,超时则发出timeout()信号
    timer->start(33);
}

//读取下一Frame图像
void MainWindow::readFarme()
{
    // 从摄像头中抓取并返回每一帧
    videocapture->read(matFrame);
    //图像处理
    if(bMethod)
    {
        cvtColor(matFrame,tmp,COLOR_BGR2GRAY);
        Canny(tmp,dst,30,255);
    }
    else
    {
        dst = matFrame.clone();
    }
    // 格式转换
    QPixmap qpixmap = Mat2QImage(dst);
    // 将图片显示到label上
    ui->label->setPixmap(qpixmap);
}

//拍照
void MainWindow::on_pushButton_2_clicked()
{
    // 格式转换
    QPixmap qpixmap = Mat2QImage(dst);
    // 将图片显示到label上
    ui->label_2->setPixmap(qpixmap);
}

//执行算法
void MainWindow::on_pushButton_4_clicked()
{
    bMethod = !bMethod;
}

//关闭摄像头
void MainWindow::on_pushButton_3_clicked()
{
    timer->stop();         // 停止读取数据。
    videocapture->release();
}




//////////////////////////helper函数//////////////////////////////////////////////////
//格式转换
QPixmap Mat2QImage(Mat src)
{
    QImage img;
    //根据QT的显示方法进行转换
    if(src.channels() == 3)
    {
        cvtColor( src, tmp, CV_BGR2RGB );
        img = QImage( (const unsigned char*)(tmp.data), tmp.cols, tmp.rows, QImage::Format_RGB888 );
    }
    else
    {
        img = QImage( (const unsigned char*)(src.data), src.cols, src.rows, QImage::Format_Grayscale8 );
    }
    QPixmap qimg = QPixmap::fromImage(img) ;
    return qimg;
}

最新文章

  1. ScrollView嵌套ListView,GridView数据加载不全问题的解决
  2. android微信分享不出去?四步搞定!
  3. android studio serialversionuid设置
  4. Implement a TextView with an animation in its left side
  5. Gitblit-Git版本服务器环境部署
  6. Java多个数字求和输出
  7. &quot;开发路上踩过的坑要一个个填起来————持续更新&#183;&#183;&#183;&#183;&#183;&#183;(7月30日)&quot;
  8. javabean以及内省技术详解(转)
  9. quartz源码解析--转
  10. 自学nodejs系列
  11. Node.js v0.10.31API手冊-控制台
  12. reposync 同步yum仓库
  13. Bmob云IM实现头像更换并存入Bmob云数据库中(1.拍照替换,2.相册选择)
  14. 使用 SetColorFilter 神奇地改变图片的颜色
  15. 必备Linux命令和C语言基础
  16. [日常] DNS解析概述
  17. 基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码
  18. python 对时间操作
  19. c# 文件笔记
  20. EFCore 2.0引用标量函数

热门文章

  1. HDU 6318 - Swaps and Inversions - [离散化+树状数组求逆序数][杭电2018多校赛2]
  2. 双节点weblogic集群安装
  3. Python面向对象:类、实例与访问限制
  4. 2015 湘潭大学程序设计比赛(Internet)--E题--烦人的异或
  5. 【python+opencv】直线检测+圆检测
  6. ABP项目创建
  7. [vue]vue-book
  8. POJ:3083 Children of the Candy Corn(bfs+dfs)
  9. java判断包含contains方法的使用
  10. VMware coding Challenge: Coin Toss Betting