QT上位机开发(简易图像处理软件)

news/2025/2/11 18:31:26/

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        大家都知道图像处理非常地重要,因为它不仅仅是可以用于拍照美颜,而且在工业、医疗和军事等方面也发挥着巨大的作用。另外一点大家有所不知的是,在工业上,图像处理排名靠前的几家公司,长期都是高毛利、高利润的代名词。这一次QT开发,我们正好可以借助于opencv开源库,做一个简单的图像处理软件。

1、创建一个简单的qt widget工程

        我们需要这个工程,仅仅是引用它的一个框架。唯一需要注意的是,创建工程的时候,一定要选择64位。

2、安装opencv库

        之前一直认为windows上面opencv库都需要自己编译的,但是没想到在opencv官方网站,都是已经编译好的头文件和静态库和动态库。有了这几点,使用起来就非常方便了。这个安装包,就是编译好的压缩库,里面有头文件、lib文件和dll文件而已。

https://opencv.org/releases/

3、设置include目录

        安装了opencv之后,那么刚才创建的工程,就一定需要把opencv include目录包进来。注意选择的时候,一定是x64下面的目录,而不是x86下面的目录,这一点很容易混肴的。

4、设置静态库的链接

        除了头文件的编译之外,opencv静态库链接也是非常需要的。不然的话,代码即使编译通过了,最后也会链接不过的。所以,还要在x64环境下选择静态库的链接地址,

5、修改main.cpp代码

        main.cpp代码其实比较简单。首先注释掉原来所有代码,接着就是创建一个Mat的image,在二值化之后通过QImage转成QPixmap,最后把QPixmap贴到一个label标签上。有了前面的头文件和lib文件,这边编译应该没有什么问题了。

#include <QtWidgets/QApplication>
#include <opencv2/opencv.hpp>
#include <QImage>
#include <QPixmap>
#include <QLabel>int main(int argc, char *argv[])
{QApplication a(argc, argv);// 读取图像cv::Mat originalImage = cv::imread("lena.png");// 将图像灰度化cv::Mat grayImage;cv::cvtColor(originalImage, grayImage, cv::COLOR_BGR2GRAY);// 将灰度图像进行二值化处理cv::Mat binaryImage;cv::threshold(grayImage, binaryImage, 128, 255, cv::THRESH_BINARY);// 将OpenCV二值化图像转换为Qt图像QImage qImage(binaryImage.data, binaryImage.cols, binaryImage.rows, binaryImage.step, QImage::Format_Grayscale8);QPixmap pixmap = QPixmap::fromImage(qImage);// 在Qt界面中显示二值化图像QLabel label;label.setPixmap(pixmap);label.show();return a.exec();
}

6、拷贝opencv的dll文件到可执行文件目录

        生成的exe既依赖于qt,也依赖于opencv。那么依赖于opencv的这部分呢,可以直接把对应的dll文件copy到生成的exe目录下,qt这部分可以通过直接vs2017 debug调试启动的方式来解决。

7、寻找vcruntime140_1d.dll

        实际运行的时候,系统还会提示我们,当前没有vcruntime140_1d.dll这个文件。关于这个文件,应该是opencv编译的时候涉及到的,可以通过下面这个网站进行查找,拷贝到exe目录下即可,

https://cn.dll-files.com/vcruntime140_1d.dll.html

8、下载测试图片lena.png

        所有程序都准备好了,那么下面需要的就是测试图片。这部分呢,我们可以去寻找最经典的测试图片lena.png,比如可以从如下这个地址进行考虑。当然,图片记得一定放在h文件、cpp文件同级目录下。

https://github.com/mikolalysenko/lena/blob/master/lena.png

9、开始测试

        程序、动态库、图片都准备好之后,就可以测试了。这个时候,我们在vs2017下面启动调试程序,不出意外的话,就可以看到一张灰化的二值化图片。


http://www.ppmy.cn/news/1290749.html

相关文章

数据加密保护有哪些应用场景

数据加密保护在当今的信息时代具有广泛的应用场景&#xff0c;它为各种数据安全需求提供了有效的解决方案。以下是一些常见的应用场景&#xff1a; 金融交易安全&#xff1a;在金融行业&#xff0c;数据加密是保障交易安全的关键手段。无论是信用卡信息、账户余额还是交易记录&…

ElasticSearch自定义算分排序(Function Score Query)

使用 function score query&#xff0c;可以修改文档的相关性算分 (query score)&#xff0c;根据新得到的算分排序。 目录 Function Score Query 案例 Function Score Query 几种默认的计算分值的函数&#xff1a; Weight:为每一个文档设置一个简单而不被规范化的权重Fie…

微同城生活源码系统:专业搭建本地生活服务平台 附带完整的安装部署教程

随着移动互联网的普及&#xff0c;人们越来越依赖手机进行日常生活中的各种活动&#xff0c;包括购物、餐饮、娱乐等。而传统的本地生活服务平台往往存在着功能单一、用户体验差等问题&#xff0c;无法满足用户日益增长的需求。因此&#xff0c;开发一款功能强大、易用性强的本…

解释data block , extent 和 segment的区别

在数据库管理系统中&#xff0c;Data Block、Extent和Segment是用于描述和管理存储空间的三种不同级别的单位。它们之间的主要区别如下&#xff1a; Data Block&#xff08;数据块&#xff09;&#xff1a; Data Block是数据库中最小的逻辑存储单位&#xff0c;通常也是数据实际…

服务端开发中的数据库交互与数据存储

随着互联网的发展&#xff0c;服务端开发在构建强大的应用程序中扮演着至关重要的角色。在这个过程中&#xff0c;与数据库的高效交互和数据存储变得尤为关键。本文将探讨在服务端开发中如何处理与数据库的交互以及有效地进行数据存储。 1. 数据库的选择 在开始服务端开发之前…

计算机网络【EPOLL 源码详解】

IO多路复用 在以前&#xff0c;传统的网络编程是多线程模型&#xff0c;一个线程单独处理一个请求。 然而&#xff0c;线程是很昂贵的资源&#xff1a; 线程的创建和销毁成本很高&#xff0c;linux的线程实际上是特殊的进程&#xff1b;因此通常会使用线程池来减少线程创建和…

Redis命令---List篇

目录 1.Redis Lindex 命令 - 通过索引获取列表中的元素简介语法可用版本: > 1.0.0返回值: 列表中下标为指定索引值的元素。 如果指定索引值不在列表的区间范围内&#xff0c;返回 nil 。 示例 2.Redis Rpush 命令 - 在列表中添加一个或多个值简介语法可用版本: > 1.0.0返…

实验笔记之——服务器链接

最近需要做NeRF相关的开发,需要用到GPU,本博文记录本人配置服务器远程链接的过程,本博文仅供本人学习记录用~ 连上服务器 首先先确保环境是HKU的网络环境(HKU AnyConnect也可)。伙伴已经帮忙创建好用户(第一次登录会提示重新设置密码)。用cmd ssh链接ssh -p 60001 <u…