初步实现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;
}

初步实现GoQtTemplate的更多相关文章
- 移动端之Android开发的几种方式的初步体验
目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...
- CSharpGL(29)初步封装Texture和Framebuffer
+BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...
- Android自定义View初步
经过上一篇的介绍,大家对于自定义View一定有了一定的认识,接下来我们就以实现一个图片下显示文字的自定义View来练习一下.废话不多说,下面进入我们的正题,首先看一下我们的思路,1.我们需要通过在va ...
- 初步认识Node 之Node为何物
很多人即便是在使用了Node之后也不知道它到底是什么,阅读完本文你应该会有一个初步的.具体的概念了. Node的目标 提供一种简单的构建可伸缩网络程序的方法.那么,什么是可伸缩网络程序呢?可伸缩 ...
- [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)
[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date 周六 10 一月 2015 By 钟谢伟 Category website develop ...
- 基于C/S架构的3D对战网络游戏C++框架_05搭建系统开发环境与Boost智能指针、内存池初步了解
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- Azure底层架构的初步分析
之所以要写这样的一篇博文的目的是对于大多数搞IT的人来说,一般都会对这个topic很感兴趣,因为底层架构直接关乎到一个公有云平台的performance,其实最主要的原因是我们的客户对此也非常感兴趣, ...
- CozyRSS开发记录14-RSS源管理初步完工
CozyRSS开发记录14-RSS源管理初步完工 1.添加源的响应 DialogHost.Show有几个版本的重载,加一个DialogClosingEventHandler参数.我们让添加源对话框的添 ...
- 初步了解CPU
了解CPU By JackKing_defier 首先说明一下,本文内容主要是简单说明CPU的大致原理,所需要的前提知识我会提出,但是由于篇幅我不会再详细讲解需要的其他基础知识.默认学过工科基础课. ...
随机推荐
- 【紫书】Play on Words UVA - 10129 欧拉回路
题意:给你1e5个字符串,若前一个的末尾字母等于当前的首字母,则可以连在一起(成语接龙一个意思)判断是否可以将他们连在一起 题解:将首位看作点,单词看作边.变成欧拉回路问题. 判断出入度是否相等,再用 ...
- python数据结构之哈希表
哈希表(Hash table) 众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry.这些个键值对(Entry)分散存储在一个数组当中,这个数组就是Has ...
- PHP Architecture
http://www.laruence.com/2008/08/12/180.html
- Python 字典 dict() 函数
描述 Python 字典 dict() 函数用于创建一个新的字典,用法与 Pyhon 字典 update() 方法相似. 语法 dict() 函数函数语法: dict(key/value) 参数说明: ...
- GDB常用命令使用说明(一)
本文由霸气的菠萝原创,转载请注明出处:http://www.cnblogs.com/xsln/p/gdb_instructions1.html 全部关于gdb的文章索引请点这里 GDB(GNU Deb ...
- Nginx配置优化
Nginx优化: 并发优化 KeepAlive长连接 压缩优化 配置缓存 两个监控工具: nginx_status:并发统计 Ngxtop:请求统计 Nginx配置并发.长连接.压缩.状态监控: 关闭 ...
- const与常量,傻傻分不清楚~
当数组的长度在运行中才能够确定时,普通的静态数组无法满足要求,此时需要动态数组来实现. 今天突然想,const变量在初始化时可以接受变量的赋值,那么可不可以用它来定义一个静态数组呢?于是有下面的尝试: ...
- python的三种字符串格式化方法
1.最方便的 print 'hello %s and %s' % ('df', 'another df') 但是,有时候,我们有很多的参数要进行格式化,这个时候,一个一个一一对应就有点麻烦了,于是就有 ...
- -webkit-line-clamp超过两行就出现省略号
-webkit-line-clamp 是一个 不规范的属性(unsupported WebKit property),它没有出现在 CSS 规范草案中. 限制在一个块元素显示的文本的行数. 为了实现该 ...
- Summary: sorting Algorithms
Insertion sort is a simple sorting algorithm that builds the final sorted array (or list) one item a ...