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
英文地址,請注明出處:http://en.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服務是…