zoukankan      html  css  js  c++  java
  • 初步实现GoQtTemplate

    #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;
    }
    
    

  • 相关阅读:
    Android的NDK开发(5)————Android JNI层实现文件的read、write与seek操作
    android Context
    android 控件放在 listview 的下方 并且在 屏幕底部
    android Activity 布局 和 控件属性
    有关vtun和虚拟网卡要做的实验
    android xml pull 解析 豆瓣书籍
    android UI设计之 背景透明色 项目资源文件关系
    android 资源引用 自定义标题栏
    真机调试Unable to open sync connection!
    C++ 编译预处理
  • 原文地址:https://www.cnblogs.com/jsxyhelu/p/7844424.html
Copyright © 2011-2022 走看看