ubuntu24.04 QT中配置opencv4.12

假如生成的opencv路径是:/usr/local/opencv4.12

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++17# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \mainwindow.cppHEADERS += \mainwindow.hFORMS += \mainwindow.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target# 以下是opencv的引用INCLUDEPATH +=  /usr/local/opencv4.12/include\/usr/local/opencv4.12/include/opencv4 \/usr/local/opencv4.12/include/opencv4/opencv2LIBS += /usr/local/opencv4.12/lib/libopencv_*.so \# /home/hwiki/OpenCV/install/lib/libopencv_core.so    \# /home/hwiki/OpenCV/install/lib/libopencv_imgproc.so \# /home/hwiki/OpenCV/install/lib/libopencv_imgcodecs.so

#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QFileDialog>
#include <QMessageBox>
#include <QPixmap>#include <opencv2/opencv.hpp>
#include <opencv2/imgproc.hpp>using namespace cv;  // 引入opencv的命名空间
using namespace std;// 全局变量,用于存储原始图像
cv::Mat g_img_input;MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{QString filename = QFileDialog::getOpenFileName(this,"打开图像文件",".","Image Files (*.bmp *.png *.jpg *.jpeg)");if (filename.isEmpty()) {QMessageBox::information(this, "提示", "未选择文件或文件打开失败!");return;}// 2. 使用 OpenCV 读取图像g_img_input = cv::imread(filename.toStdString()); // 在Ubuntu上,toStdString() 通常足够if (g_img_input.empty()) {QMessageBox::information(this, "提示", "无法读取图像文件,请检查文件路径和格式!");return;}// 3. 转换颜色空间 (OpenCV 读取的是 BGR, Qt 显示需要 RGB)cv::Mat img_rgb;cv::cvtColor(g_img_input, img_rgb, cv::COLOR_BGR2RGB);// 4. 将 cv::Mat 转换为 QImage// 注意:img_rgb 的数据必须是连续的,通常 imread 读取的是连续的QImage qimg(img_rgb.data,img_rgb.cols,img_rgb.rows,static_cast<int>(img_rgb.step), // 每行字节数QImage::Format_RGB888);// 5. 将 QImage 转换为 QPixmap 并显示在 QLabel 上QPixmap pixmap = QPixmap::fromImage(qimg);// 缩放图片以适应 QLabel 大小,同时保持原始比例QPixmap scaledPixmap = pixmap.scaled(ui->imageLabel->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);ui->imageLabel->setPixmap(scaledPixmap); // 假设您的 QLabel 名为 imageLabel// 设置 QLabel 的对齐方式,使图片居中显示ui->imageLabel->setAlignment(Qt::AlignCenter);// 6. 清理 (Mat 对象在函数结束时会自动释放)// img_input, img_rgb 会自动析构
}void MainWindow::on_pushButton_gray_clicked()
{// 直接写在这里// 检查是否有已加载的图像if (g_img_input.empty()) {QMessageBox::information(this, "提示", "请先打开一个图像文件!");return;}// 将图像转换为灰度图cv::Mat img_gray;cv::cvtColor(g_img_input, img_gray, cv::COLOR_BGR2GRAY);// 将灰度图转换为 QImage (灰度格式)QImage qimg(img_gray.data,img_gray.cols,img_gray.rows,static_cast<int>(img_gray.step),QImage::Format_Grayscale8);// 将 QImage 转换为 QPixmap 并显示在 QLabel 上QPixmap pixmap = QPixmap::fromImage(qimg);// 缩放图片以适应 QLabel 大小,同时保持原始比例QPixmap scaledPixmap = pixmap.scaled(ui->imageLabel->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);ui->imageLabel->setPixmap(scaledPixmap);// 设置 QLabel 的对齐方式,使图片居中显示ui->imageLabel->setAlignment(Qt::AlignCenter);
}

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

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

相关文章

客户端是否都需要主动发送`FindService`报文来寻找服务

<摘要> 在AUTOSAR SOME/IP-SD的服务发现流程中&#xff0c;客户端是否需要主动发送FindService报文来寻找服务&#xff0c;是理解服务订阅逻辑的一个关键。这将直接影响到事件组订阅的触发时机和网络行为。下文将结合规范&#xff0c;对这一问题进行深入剖析。 <解析&…

Go语言流式输出实战:构建高性能实时应用

什么是流式输出&#xff1f; 流式输出&#xff08;Streaming Output&#xff09;是一种服务器推送技术&#xff0c;允许数据在生成过程中逐步发送到客户端&#xff0c;而不是等待所有数据准备就绪后一次性发送。这种技术显著改善了用户体验&#xff0c;特别是在处理大量数据或长…

操作系统上的Docker安装指南:解锁容器化新世界

摘要&#xff1a;本文详细介绍了Docker在不同操作系统上的安装方法。主要内容包括&#xff1a;Windows系统通过Docker Desktop安装&#xff0c;需启用Hyper-V和WSL2&#xff1b;Mac系统同样使用Docker Desktop&#xff0c;根据芯片类型选择版本&#xff1b;Linux系统以Ubuntu为…

【微信小程序】分别解决H5的跨域代理问题 和小程序正常不需要代理问题

——总问&#xff1a;何为跨域和代理&#xff1f; &#x1f539;什么叫跨域&#xff1f; 前端在浏览器里发请求时&#xff0c;如果 域名 / 协议 / 端口 三个中有一个不一样&#xff0c;就会触发 跨域问题。 例子&#xff1a; 页面跑在 http://localhost:5173你要请求接口 http:…

数字签名 digital signature

文章目录1、严谨的定义2、技术原理&#xff1a;如何工作&#xff1f;第一步&#xff1a;发送者 - 签名过程第二步&#xff1a;接收者 - 签名验证过程3、C语言实现示例4、关键技术要点5、安全注意事项6、最重要的应用&#xff1a;TLS/SSL 与网站安全1、严谨的定义 数字签名是一…

对于STM32工程模板

工程模板文件下载链接 https://download.csdn.net/download/qq_58631644/91809234 重命名 打开这个文件夹 重命名保持一致 双击打开

使用 SmartIDE 开发长安链 Go 语言智能合约

文章目录官方文档Chrome 插件登录 SmartIDE合约调试合约编译官方文档 使用SmartIDE编写Go智能合约 Chrome 插件 https://git.chainmaker.org.cn/chainmaker/chainmaker-smartplugin/-/releases 登录 SmartIDE https://ide.chainmaker.org.cn/ 合约调试 合约编译

MEM课程之物流与供应链管理课程经典案例及分析-个人原创内容放在此保存

供应链管理课程案例 特殊时期期间,美国出现养猪户对数百万头猪实施安乐死和奶农倾倒牛奶现象。从供应链的角度分析该现象并提出应对思路。要求有分析框架和文献支撑。 供应链管理课程案例分析 从供应链角度分析特殊时期美国猪安乐死和倾倒牛奶现象 本文描述了特殊时期期间,美…

Transformer:从入门到精通

学习一个深度学习模型&#xff0c;我们首先需要从理论的角度理解它的构架&#xff0c;进而理解代码。 Transformer背景 首先我们知道&#xff0c;神经网络有一个巨大的家族&#xff0c;其中的CNN&#xff08;卷积神经网络&#xff09;源于视觉研究&#xff0c;目标是让机器自…

FOC开环控制代码解读

这段代码实现了一个开环速度控制系统&#xff0c;用于控制电机转速。它通过PWM控制器输出电压信号&#xff0c;来驱动电机转动。具体来说&#xff0c;它在指定目标速度下&#xff0c;持续通过电压信号进行控制。下面是对该代码详细流程的逐步解析&#xff1a; 1. 宏定义与变量初…

Ansible Playbook 调试与预演指南:从语法检查到连通性排查

1&#xff1a;调试 playbook 时&#xff0c;最该先看哪一段输出&#xff1f; 答&#xff1a;先查看ansible-navigator run的 PLAY RECAP 段落&#xff0c;它能一次性给出每台受管主机的 ok、changed、unreachable、failed、skipped、rescued、ignored 等计数&#xff0c;快速定…

深入探讨可视化技术如何实现安全监测

可视化在安全监测中的作用&#xff0c;远超越了“美观的图表”这一表层概念。它是将抽象、混沌的安全数据转化为直观、可理解的视觉信息的过程&#xff0c;其核心价值在于赋能人类直觉&#xff0c;大幅提升认知与决策效率&#xff0c;从而实现对安全态势的深度感知和快速响应。…

Scikit-learn Python机器学习 - Scikit-learn加载数据集

锋哥原创的Scikit-learn Python机器学习视频教程&#xff1a; 2026版 Scikit-learn Python机器学习 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程主要讲解基于Scikit-learn的Python机器学习知识&#xff0c;包括机器学习概述&#xff0c;特征工程(数据…

如何在实际应用中选择Blaze或Apache Gluten?

Blaze 与 Apache Gluten 深入研究报告&#xff1a;技术实现、性能对比与选型指南 一、项目背景与技术演进 1.1 大数据处理性能瓶颈与 Native 引擎兴起 随着大数据量处理需求的不断增长&#xff0c;基于 JVM 的 Spark 在 CPU 密集型场景下的性能瓶颈日益凸显。从 Spark 2.4 版本…

Mysql 学习感悟 Day 1 Mysql架构

Mysql 学习感悟 Day 1简介具体流程如下&#xff1a;Server 层连接器查询缓存分析器优化器执行器存储引擎层更新语句是怎么执行的例子日志redo logbinlogmysql事务的二段提交Mysql官网 mysql安装教程 Navicat免费安装亲测有用 简介 大体来说&#xff0c;MySQL 服务端可以分为…

企业为什么需要部署数据防泄露系统?

在数字化转型的浪潮中&#xff0c;企业核心数据已成为商业竞争的“生命线”。然而&#xff0c;数据泄露事件频发&#xff0c;不仅可能导致巨额经济损失&#xff0c;更会严重损害企业信誉。据IBM《2023年数据泄露成本报告》显示&#xff0c;全球平均数据泄露成本已攀升至445万美…

CPU的MBR寄存器和MDR寄存器

在学习计算机组成原理&#xff0c;特别是学到CPU时&#xff0c;寄存器是必须了解的一些器件&#xff0c;比如说程序计数器&#xff08;PC&#xff09;,指令寄存器&#xff08;IR&#xff09;等寄存器&#xff0c;同时&#xff0c;了解MDR和MBR这两个寄存器也是必要的&#xff1…

QWidget和QML模式下阻止槽调用的方法总结

目录 1.背景 2.QWidget中阻止槽函数调用的方法 2.1.临时阻塞信号发射&#xff08;blockSignals()&#xff09; 2.2.断开特定信号与槽的连接&#xff08;disconnect()&#xff09; 2.3.在槽函数内通过标志位过滤 2.4.重写信号发射函数&#xff08;针对自定义信号&#xff…

序列化,应用层自定义协议

我们发的是一个结构化的数据OS内部&#xff0c;协议全部都是传递结构体对象。可以直接发送二进制对象吗&#xff1f;因为CS双方都能认识这个结构体!!!可以直接发送二进制对象&#xff0c;但是不建议1. 客户端和服务器说属于不同的OS&#xff0c;不同的结构体&#xff0c;在不同…

序列化和反序列的学习

一&#xff1a;重谈协议1 理解网络协议&#xff0c;可以把它想象成网络世界里的“交通规则”和“通用语言”。它是一套预先定义好的规则、标准和约定&#xff0c;使得不同设备、不同系统之间能够顺利地进行通信和数据交换。我们从TCP协议上面理解一下&#xff0c;首先TCP服务是…