初步实现GoQtTemplate
2024-10-10 20:12:38
#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;
}
最新文章
- ScrollView嵌套ListView,GridView数据加载不全问题的解决
- android微信分享不出去?四步搞定!
- android studio serialversionuid设置
- Implement a TextView with an animation in its left side
- Gitblit-Git版本服务器环境部署
- Java多个数字求和输出
- ";开发路上踩过的坑要一个个填起来————持续更新&#183;&#183;&#183;&#183;&#183;&#183;(7月30日)";
- javabean以及内省技术详解(转)
- quartz源码解析--转
- 自学nodejs系列
- Node.js v0.10.31API手冊-控制台
- reposync 同步yum仓库
- Bmob云IM实现头像更换并存入Bmob云数据库中(1.拍照替换,2.相册选择)
- 使用 SetColorFilter 神奇地改变图片的颜色
- 必备Linux命令和C语言基础
- [日常] DNS解析概述
- 基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码
- python 对时间操作
- c# 文件笔记
- EFCore 2.0引用标量函数
热门文章
- HDU 6318 - Swaps and Inversions - [离散化+树状数组求逆序数][杭电2018多校赛2]
- 双节点weblogic集群安装
- Python面向对象:类、实例与访问限制
- 2015 湘潭大学程序设计比赛(Internet)--E题--烦人的异或
- 【python+opencv】直线检测+圆检测
- ABP项目创建
- [vue]vue-book
- POJ:3083 Children of the Candy Corn(bfs+dfs)
- java判断包含contains方法的使用
- VMware coding Challenge: Coin Toss Betting