初步实现GoQtTemplate

简介: p,li { white-space: pre-wrap }#ifndef MAINWINDOW_H#define MAINWINDOW_H#include //新添加#include #include #include #include #include #include ...
#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;
}
 

目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
4天前
|
弹性计算 安全 API
访问控制(RAM)|云上安全使用AccessKey的最佳实践
集中管控AK/SK的生命周期,可以极大降低AK/SK管理和使用成本,同时通过加密和轮转的方式,保证AK/SK的安全使用,本次分享为您介绍产品原理,以及具体的使用步骤。
101783 0
|
4天前
|
SQL 关系型数据库 分布式数据库
Doodle Jump — 使用Flutter&Flame开发游戏真不错!
用Flutter&Flame开发游戏是一种什么体验?最近网上冲浪的时候,我偶然发现了一个国外的游戏网站,类似于国内的4399。在浏览时,我遇到了一款经典的小游戏:Doodle Jump...
|
12天前
|
弹性计算 运维 安全
访问控制(RAM)|云上程序使用临时凭证的最佳实践
STS临时访问凭证是阿里云提供的一种临时访问权限管理服务,通过STS获取可以自定义时效和访问权限的临时身份凭证,减少长期访问密钥(AccessKey)泄露的风险。本文将为您介绍产品原理,以及具体的使用步骤。
151033 4
|
10天前
|
数据采集 存储 运维
提升团队工程交付能力,从“看见”工程活动和研发模式开始
本文从统一工程交付的概念模型开始,介绍了如何将应用交付的模式显式地定义出来,并通过工具平台落地。
119990 57
|
10天前
|
监控 负载均衡 Java
深入探究Java微服务架构:Spring Cloud概论
**摘要:** 本文深入探讨了Java微服务架构中的Spring Cloud,解释了微服务架构如何解决传统单体架构的局限性,如松耦合、独立部署、可伸缩性和容错性。Spring Cloud作为一个基于Spring Boot的开源框架,提供了服务注册与发现、负载均衡、断路器、配置中心、API网关等组件,简化了微服务的开发、部署和管理。文章详细介绍了Spring Cloud的核心模块,如Eureka、Ribbon、Hystrix、Config、Zuul和Sleuth,并通过一个电商微服务系统的实战案例展示了如何使用Spring Cloud构建微服务应用。
103500 8
|
12天前
|
人工智能 Serverless 对象存储
让你的文档从静态展示到一键部署可操作验证
通过函数计算的能力让阿里云的文档从静态展示升级为动态可操作验证,用户在文档中单击一键部署可快速完成代码的部署及测试。这一改变已在函数计算的活动沙龙中得到用户的认可。
120830 215
|
11天前
|
SQL 存储 数据可视化
Ganos H3地理网格能力解析与最佳实践
本文介绍了Ganos H3的相关功能,帮助读者快速了解Ganos地理网格的重要特性与应用实践。H3是Uber研发的一种覆盖全球表面的二维地理网格,采用了一种全球统一的、多层次的六边形网格体系来表示地球表面,这种地理网格技术在诸多业务场景中得到广泛应用。Ganos不仅提供了H3网格的全套功能,还支持与其它Ganos时空数据类型进行跨模联合分析,极大程度提升了客户对于时空数据的挖掘分析能力。
|
11天前
|
存储 缓存 安全
深度解析JVM世界:JVM内存结构
深度解析JVM世界:JVM内存结构
|
18天前
|
人工智能 编解码 对象存储
一键生成视频!用 PAI-EAS 部署 AI 视频生成模型 SVD 工作流
本教程将带领大家免费领取阿里云PAI-EAS的免费试用资源,并且带领大家在 ComfyUI 环境下使用 SVD的模型,根据任何图片生成一个小短视频。