vs+opencv+QT调试程序

news2024/10/6 20:44:59

2021-09-28vs+opencv+QT简单的图像处理工程_opencv 用qt还是vs_二两山栀子的博客-CSDN博客

【vs+opencv+Qt搭建简单的图像处理界面】https://www.bilibili.com/video/BV16T411j7XQ?vd_source=0aeb782d0b9c2e6b0e0cdea3e2121eba

调试过程一直出现这种问题,后来改DEBUG为release就可以了

mainwindow.hpp

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QLabel>
#include <QMainWindow>
#include <QFileDialog>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;

namespace Ui {
    class MainWindow;
    class mainwindowClass;
}

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 on_pushButton_4_clicked();
private:
    QImage MatToQImage(const cv::Mat& mat);				// MAT类型 转 QImage类型
    void display_MatInQT(QLabel* label, cv::Mat mat);	// MAT对象 QT显示

private:
    Ui::mainwindowClass* ui;
    Mat image;
    Mat mat_Gaussian;
    Mat gray;
};

#endif // MAINWINDOW_H#pragma once

mainwindow.cpp

#include "mainwindow.hpp"
#include "ui_mainwindow.h"
#include <QMessageBox>
MainWindow::MainWindow(QWidget* parent) :
    QMainWindow(parent),
    ui(new Ui::mainwindowClass)
{
    ui->setupUi(this);
    ui->pushButton_2->setEnabled(false);
    ui->pushButton_3->setEnabled(false);
    ui->pushButton_4->setEnabled(false);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    //调用窗口打开文件
    ui->label->clear();
    ui->label_1->clear();
    QString filename = QFileDialog::getOpenFileName(this,
        tr("open image"),
        ".",
        tr("Image file(*.png *.jpg *.bmp)"));
    image = imread(filename.toLocal8Bit().data());
    if (image.data) {
        ui->pushButton_2->setEnabled(true);
        ui->pushButton_3->setEnabled(true);
        ui->pushButton_4->setEnabled(true);
        // 通过 lable 方式显示图片
        display_MatInQT(ui->label, image);
    }
    else
    {
        QMessageBox::information(this, tr("提示"), tr("未成功载入图片!"), QMessageBox::Ok);
    }
}
void MainWindow::on_pushButton_2_clicked()
{
    ui->label_1->clear();

    if (image.data)
    {
        // 高斯模糊
        GaussianBlur(image, mat_Gaussian, Size(29, 29), 0, 0);
        display_MatInQT(ui->label_1, mat_Gaussian);
    }
    else
    {
        QMessageBox::information(this, tr("提示"), tr("未成功载入图片!"), QMessageBox::Ok);
    }

}
void MainWindow::on_pushButton_3_clicked()
{
    ui->label_1->clear();

    if (image.data)
    {
        // 灰度化
        cvtColor(image, gray, COLOR_BGR2GRAY);
        display_MatInQT(ui->label_1, gray);
    }
    else
    {
        QMessageBox::information(this, tr("提示"), tr("未成功载入图片!"), QMessageBox::Ok);
    }

}
void MainWindow::on_pushButton_4_clicked()
{
    ui->label_1->clear();

    if (image.data)
    {
        // 边缘检测

        Canny(image, gray, 150, 100, 3);
        display_MatInQT(ui->label_1, gray);
    }
    else
    {
        QMessageBox::information(this, tr("提示"), tr("未成功载入图片!"), QMessageBox::Ok);
    }

}
QImage MainWindow::MatToQImage(const cv::Mat& mat)
{

    // 8-bits unsigned, NO. OF CHANNELS = 1
    if (mat.type() == CV_8UC1)
    {
        QImage image(mat.cols, mat.rows, QImage::Format_Indexed8);
        // Set the color table (used to translate colour indexes to qRgb values)
        image.setColorCount(256);
        for (int i = 0; i < 256; i++)
        {
            image.setColor(i, qRgb(i, i, i));
        }
        // Copy input Mat
        uchar* pSrc = mat.data;
        for (int row = 0; row < mat.rows; row++)
        {
            uchar* pDest = image.scanLine(row);
            memcpy(pDest, pSrc, mat.cols);
            pSrc += mat.step;
        }
        return image;
    }
    // 8-bits unsigned, NO. OF CHANNELS = 3
    else if (mat.type() == CV_8UC3)
    {
        // Copy input Mat
        const uchar* pSrc = (const uchar*)mat.data;
        // Create QImage with same dimensions as input Mat
        QImage image(pSrc, mat.cols, mat.rows, (int)mat.step, QImage::Format_RGB888);
        return image.rgbSwapped();
    }
    else if (mat.type() == CV_8UC4)
    {
        //qDebug() << "CV_8UC4";
        // Copy input Mat
        const uchar* pSrc = (const uchar*)mat.data;
        // Create QImage with same dimensions as input Mat
        QImage image(pSrc, mat.cols, mat.rows, (int)mat.step, QImage::Format_ARGB32);
        return image.copy();
    }
    else
    {
        //qDebug() << "ERROR: Mat could not be converted to QImage.";
        return QImage();
    }
}
// 
void MainWindow::display_MatInQT(QLabel* label, Mat mat)
{

    label->setPixmap(QPixmap::fromImage(MatToQImage(mat)).scaled(label->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/978118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HDLBits 练习 Always if2 并给出逻辑简化过程

题目 Always if2 在前面的练习中我们使用了简单的逻辑门与一些逻辑门的组合。这些电路都可以作为组合电路的例子。 组合意味着这个电路的输出只是输入的函数&#xff08;数学意义上的&#xff09;。数学上的函数就意味着当你给定一个输入的时候 对应的只会有一个输出。因此有一…

ChatPaper临时升级教程

ChatPaper临时升级教程 文章目录 ChatPaper临时升级教程必要的声明&#xff1a;升级教程&#xff1a; 必要的声明&#xff1a; 最近只能手动发卡了&#xff0c;所以单独写一个手动升级的教程。 先声明一下付费的内容&#xff1a; 500K大概是30篇左右的总结&#xff1b; 200k大…

计算机网络的故事——HTTP首部

HTTP首部 在HTTP协议通信交互中使用的首部字段。不限于RFC2616中定义的47种首部字段&#xff0c;还有Cookie、setCookie和Content-Disposition等 HTTP 首部字段将定义成缓存代理和非缓存代理的行为&#xff0c;分成 2 种类型。端到端首部和逐跳首部

单向链表(c/c++)

链表是一种常见的数据结构&#xff0c;其中运用到了结构体指针&#xff0c;链表可以实现动态存储分配&#xff0c;换而言之&#xff0c;链表是一个功能强大的数组&#xff0c;可以在某个节点定义多种数据类型&#xff0c;可以实现任意的添加&#xff0c;删除&#xff0c;插入节…

通过nginx将https协议反向代理到http协议请求上

通过nginx将https协议反向代理到http协议请求上 1、问题背景2、介绍nginx的反向代理功能及配置https协议3、具体实现3.1 后端服务支持方式3.2 nginx重定向方式 3.3、nginx的反向代理方式4、关于nginx常用模块和指令 1、问题背景 目前一个系统仅支持https协议访问&#xff0c;因…

anaconda navigator打不开,一直在loading画面

anaconda navigator打不开&#xff0c;一直在loading画面。百度解决方法&#xff0c;用网上的方法在命令窗口里运行conda update anaconda结果一直显示 solving environment卡在那里。又尝试用管理员身份运行还是不行&#xff0c;打开后出现There in aninstance of Anaconda Na…

在MySQL中查看数据库和表的数据大小

在MySQL中查看数据库和表的数据大小 在管理和维护MySQL数据库时&#xff0c;了解数据库和表的数据大小是非常重要的。这可以帮助您监控数据库的增长、优化性能以及规划存储需求。本博客将介绍如何使用SQL查询来查看MySQL数据库和表的数据大小。 查看MySQL数据库的总数据大小 …

linux并发服务器 —— IO多路复用(八)

半关闭、端口复用 半关闭只能实现数据单方向的传输&#xff1b;当TCP 接中A向 B 发送 FIN 请求关闭&#xff0c;另一端 B 回应ACK 之后 (A 端进入 FIN_WAIT_2 状态)&#xff0c;并没有立即发送 FIN 给 A&#xff0c;A 方处于半连接状态 (半开关)&#xff0c;此时 A 可以接收 B…

vscode使用delve调试golang程序

环境配置 delve仓库&#xff0c;含有教程&#xff1a;https://github.com/go-delve/delve golang的debugging教程&#xff1a;https://github.com/golang/vscode-go/wiki/debugging > go version go version go1.20 windows/amd64> go install github.com/go-delve/de…

使用 Nacos 在 Spring Boot 项目中实现服务注册与配置管理

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

转录因子分析预测 cistrome db

Toolkit for CistromeDBhttp://dbtoolkit.cistrome.org/基因表达调控系列问题汇总(持续更新) - 知乎 (zhihu.com)

Java环境的安装

最近博主也是在学校开始学习了Java&#xff0c;也通过老师知道了可以通过大学生学生证申(bai)请(piao) IDEA的企业版&#xff08;社区版也是够学习用的&#xff09;有很多同学还是没有搞懂便做一下分享。 &#x1f331;博客主页&#xff1a;青竹雾色间. &#x1f618;博客制作…

初步了解android如何锁键

百年三万六千日&#xff0c;光阴只有瞬息间。 手机下面的三个图形&#xff0c;正方形&#xff0c;园形&#xff0c;三角形分别的什么建&#xff1f;都起到什么功能&#xff1f; 三角形的那个叫返回键&#xff0c;就是可以返回你的上一个操作; 圆形是HOME键&#xff0c;按一下可…

线上 udp 客户端请求服务端客户端句柄泄漏问题

本题分别从如下三个方面来分享&#xff1a; 问题描述 自定义连接池的编写 common_pool 的使用 问题描述 线上有一个业务&#xff0c;某个通服务通知 udp 客户端通过向 udp 服务端&#xff08;某个硬件设备&#xff09;发送 udp 包来进行用户上线操作 当同时有大量的请求打到…

Docker 实现 MySQL 一主一从配置

1、新建主服务器容器实例&#xff0c;端口&#xff1a; 3307 docker run \ -p 3307:3306 \ --name mysql-master \ -v /var/docker/mysql-master/log:/var/log/mysql \ -v /var/docker/mysql-master/data:/var/lib/mysql \ -v /var/docker/mysql-master/conf:/etc/mysql \ --p…

MSST-NET:用于高光谱和多光谱图像融合的多尺度空间-光谱Transfomer网络

1.网络结构 主要贡献&#xff1a; 提出了一种多尺度空间光谱Transformer网络光谱多头注意力旨在提取光谱特征引入多尺度波段/补丁嵌入来提取多尺度特征自监督训练 痛点&#xff1a;卷积核的感受野有限&#xff0c;基于卷积神经网络CNN的融合方法无法利用特征图中的全局关系…

pip install mysqlclient报错

安装mysqlclient时报错 先查看安装的python版本 python -V 根据版本下载下载对应的 mysqlclient 文件 https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclienthttps://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient 我的是3.7版本的 就下载3.7版本&#xff0c;64位系…

aarch64 arm64 部署 stable diffusion webui 笔记 【1】准备 venv 安装pytorch 验证cuda

aarch64 pytorch(没有aarch64对应版本&#xff0c;自行编译) pytorch-v2.0.1 cuda arm64 aarch64 torch 2.0.1cu118 源码编译笔记【2】验证cuda安装 成功_hkNaruto的博客-CSDN博客 创建venv [rootceph3 stable-diffusion-webui]# /usr/local/Python-3.10.12/bin/python3 -m v…

一种结合白平衡统计信息和曝光信息的软光敏算法专利学习(专利四)

图像分块&#xff1a; 参见下图&#xff0c;一幅图像大小为5*6(像素)&#xff0c;每个像素包含R、G、B三个分量&#xff0c;该图像划分为4个分块&#xff0c;第一分块的大小为3*3像素&#xff0c;第二分块的大小为3*3(像素)&#xff0c;第三分块的大小为2*3像素&#xff0c;第四…

OpenCV基础(一):图片加载,图片腐蚀,图片模糊,图片边缘检测,图片保存

前言 在Android音视频开发中&#xff0c;网上知识点过于零碎&#xff0c;自学起来难度非常大&#xff0c;不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》&#xff0c;结合我自己的工作学习经历&#xff0c;我准备写一个音视频系列blog。本文是音视频系…