博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初步实现GoQtTemplate
阅读量:6158 次
发布时间:2019-06-21

本文共 2453 字,大约阅读时间需要 8 分钟。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include 
//新添加
#include 
#include 
#include 
#include 
#include 
#include 
// 设置采集数据的间隔时间
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;
}
 
 

目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com

转载地址:http://fasfa.baihongyu.com/

你可能感兴趣的文章
委托到Lambda的进化: ()=> {} 这个lambda表达式就是一个无参数的委托及具体方法的组合体。...
查看>>
apache 伪静态 .htaccess
查看>>
unity3d 截屏
查看>>
ASP.NET MVC学习之控制器篇
查看>>
MongoDB ServerStatus返回信息
查看>>
分析jQuery源码时记录的一点感悟
查看>>
android中的textview显示汉字不能自动换行的一个解决办法
查看>>
程序局部性原理感悟
查看>>
UIView 动画进阶
查看>>
ROS机器人程序设计(原书第2版)1.4.7 在BeagleBone Black中安装rosinstall
查看>>
Spring如何处理线程并发
查看>>
linux常用命令(用户篇)
查看>>
获取组件的方式(方法)
查看>>
win2008 server_R2 自动关机 解决
查看>>
我的友情链接
查看>>
在C#调用C++的DLL简析(二)—— 生成托管dll
查看>>
Linux macos 常用终端操作
查看>>
企业网络的管理思路
查看>>
Linux磁盘分区与挂载
查看>>
J2se学习笔记一
查看>>