Win10_Qt6_C++_YOLO推理 -(1)MingW-opencv編譯

先上效果圖:

因為是一個為了嘗試跑通的demo,美觀、功能都先忽略哈。

一、環境

版本下載鏈接備注
cmakecmake-4.1.0-rc2-windows-x86_64.msihttps://cmake.org/download/
make
x86_64-15.1.0-release-posix-seh-ucrt-rt_v12-rev0.7z
https://github.com/niXman/mingw-builds-binaries/releases各種版本可以deepseek問一下區別
OpenCVSource code(tar.gz)4.12.0https://github.com/opencv/opencv/releases/tag/4.12.0一定要下載opencv源碼自己用mingw編譯不能直接用install的vc16
Qtqt-online-installer-windows-x64-4.10.0https://www.qt.io/download-qt-installer-oss安裝的時候勾選“個人用戶”

環境變量:

其他依賴比如numpy,我直接用的conda環境中的python

如果需要用到其他庫,比如OpenBLAS、Eigen、CUDA、cuDNN、Glog、Gflags、HDF5、OGRE、Boost、IPPICV IW、Caffe、ITT等,你需要提前編譯好這些庫,如果你缺少這些庫,你必須在之后的CMake中禁用相關的選項(有些會被自動禁用)。相關依賴庫在編譯請自行百度。

二、OpenCV編譯

問:為什么要自己編譯opencv?

答:Qt需要的是MingW編譯的庫,但是官方提供的是MSVC(vc16)編譯的。

vc16對應的是Visual Studio 2019,vc17對應Visual Studio 2022

關于Visual Studio編譯可以參考這個博客:

YOLOv8 Windows c++推理_yolov8 win cpp-CSDN博客

這里重點要講的是opencv編譯,在這卡了一周,其他的只需要搗鼓一會就能搞通。

1.打開CMake-gui.exe

沒有桌面圖標的話,在安裝目錄CMake\bin下。

然后開始自動配置了,等綠條讀完

會出現各種紅色警告,先不用管。

2.配置

這是我最新編譯成功的配置,可以直接抄,勾選完點Configure即可

可以直接在搜索框輸入關鍵詞,然后進行勾選,必要的幾個默認沒勾選的需要自己勾一下:

WITH_OPENGL、WITH_QT、WITH_ONNX、BUILD_opencv_highgui

如果帶cuda,則把cuda項都勾上,關于cuda、cudnn見此鏈接:

opencv加載cuda不成功 opencv與cuda版本的匹配_mob64ca1402d47a的技術博客_51CTO博客

后面都是WITH就不在展示了,我都是默認的

3.make

打開D:\opencv-4.12.0\mingwbuild目錄,空白處shift+鼠標右鍵 - 在此處打開PowerShell

輸入make -j 8,這樣就開始編譯了,8指使用的cpu線程數,越多編譯越快。

過程中只要沒停,啥看不懂的警告都不用管,如果停了:

(1)就回第2步,把報錯相關的那個東西勾去掉,重新生成配置再編譯。

(2)如果報錯的在D:\opencv\modules有對應文件夾(每個點進去都有CMakeLists.txt),可以嘗試先進這個文件夾,單獨編譯生成這個模塊試試(這個方法我沒試過,待驗證)

我在這里卡了好幾天,耐心點多試幾次,由于報錯各種各樣,這里也沒法總結,遇到了評論區溝通吧。(有關download的,可能是網絡原因,還有出現比較多的是highgui,但是我沒做任何處理重復了幾次又好了)

4.然后在你Qt項目的CMakeLists.txt中指定opencv路徑即可

三、Qt編譯報錯處理

這里先記錄兩個主要報錯點

1.onnx模型轉換問題

報錯關鍵詞:ERROR during processing node with 2 inputs and 1 outputs

解決辦法:Opencv和opset版本要對應,我跑通的版本是:Opencv4.12.0對應opset=17

from ultralytics import YOLOmodel = YOLO(r'yolov8n.pt')
model.export(format="onnx", simplify=True, dynamic=False, opset=17)
OpenCV 版本支持的最高 opset關鍵算子支持動態形狀支持
4.5.xopset 11-12基礎卷積/池化/激活層 ?
部分不支持:CastConstantOfShapeArgMax???45
僅靜態輸入(需固定尺寸)??5
4.6-4.7opset 13-14新增?LayerNormalizationGELU??
部分支持?SplitClip?6
有限動態批次維度 ?
4.8opset 15支持?QLinearSoftmaxConvTranspose??
INT8 量化模型兼容?6
動態批次/高度/寬度 ?
4.9+opset 16-18完整支持?AttentionEinsumInstanceNorm??
Transformer 模型實驗性支持?8
全動態輸入 ?

2.無法定位程序輸入點,...于動態鏈接庫xxx上

報錯關鍵詞:無法定位程序輸入點,...于動態鏈接庫xxx上

解決辦法:在D:\mingw64\bin文件夾(mingw安裝路徑)下有庫文件libstdc++-6.dll復制到C:\Windows\System32下即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/92491.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/92491.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/92491.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

day060-zabbix監控各種客戶端

文章目錄0. 老男孩思想-一個人的背書1. zabbix各種客戶端1.1 Windows Server監控1.2 網絡設備監控1.3 java應用監控1.4 前端監控java程序故障2. 相關項監控3. 思維導圖0. 老男孩思想-一個人的背書 學歷、能力、態度、特長、人品、口碑(身邊的人、領導) …

OpenCV 官翻 2 - 圖像處理

文章目錄色彩空間轉換目標色彩空間轉換目標追蹤如何確定要追蹤的HSV值?練習圖像的幾何變換目標變換縮放翻譯旋轉仿射變換透視變換其他資源圖像閾值處理目標簡單閾值化自適應閾值化大津二值化法Otsu二值化算法原理其他資源練習圖像平滑處理目標二維卷積(圖…

動態路由協議基礎

一、動態路由協議簡介2.動態路由協議的基本功能二、動態路由協議分類對比項距離矢量(如 RIP)鏈路狀態(如 OSPF)信息來源只聽直接鄰居說收集全網鏈路狀態,自己建 “地圖”計算邏輯鄰居給的距離 1,簡單累加用…

netstat -tunlp | grep的作用

??一、命令整體結構解析??命令由兩部分通過管道符 |連接:netstat -tunlp:核心網絡狀態統計命令,輸出指定類型的網絡連接信息;grep:文本搜索工具,用于過濾 netstat的輸出結果,僅保留符合特定…

教育數字化革命:低代碼破局與未來展望

當下,教育領域正經歷前所未有的深刻變革——教育數字化轉型。這并非簡單的技術疊加,而是從教育理念到模式的全方位重塑,已成為推動教育高質量發展、助力我國邁向教育強國的核心驅動力。數字技術正以前所未有的速度和力度,全方位重…

云服務器磁盤IO性能優化的測試與配置方法

云服務器磁盤IO性能優化的測試與配置方法在云計算環境中,磁盤IO性能直接影響著應用程序的響應速度和系統整體穩定性。本文將深入解析云服務器磁盤IO性能優化的關鍵技術路徑,從測試方法論到配置調整方案,幫助運維人員突破存儲瓶頸。我們將重點…

Python Day22 - 復習日

浙大疏錦行 Pythonday22 本周學習內容主要是有關降維的一些內容以及基本的數組操作: 數組的常見操作以及shape聚類算法的選擇以及常用評估指標、聚類后的結果分析特征篩選方法:方差篩選、lasso等SVD進行降維常見的降維算法:LDA、PCA等

飛算JavaAI文字需求描述功能:高效驅動項目開發的智能解決方案

在數字化開發浪潮中,如何將模糊的需求快速轉化為具體的開發指令,是提升項目效率的關鍵環節。飛算JavaAI推出的文字需求描述功能,以自然語言交互為核心,為開發者和項目管理者提供了一套高效、精準的需求轉化與項目管理方案&#xf…

探索自然語言處理NLP的Python世界

文本預處理:數據清洗與標準化 在自然語言處理(NLP)的旅程中,文本預處理是至關重要的第一步。原始文本數據往往包含噪聲、不一致性以及各種格式問題,直接影響后續模型的性能。文本預處理旨在將文本轉化為統一、規范的格…

ECMAScript(簡稱 ES)和 JavaScript 的關系

ECMAScript(簡稱ES)和JavaScript的關系常常令人困惑。簡單來說:ECMAScript是標準,JavaScript是實現。以下從多個維度詳細解析它們的區別與聯系: 一、定義與核心關系ECMAScript 標準化規范:由ECMA國際&#…

筆試——Day16

文章目錄第一題題目思路代碼第二題題目:思路代碼第三題題目:思路代碼優化(滑動窗口)第一題 題目 字符串替換 思路 模擬 當遍歷到正常字符時,直接加入結果答案;當遍歷到占位符時,按順序使用arg…

第十四屆藍橋杯青少Scratch國賽真題——太空大戰

明天藍橋杯大賽青少組省賽報名就開始報名了,小伙伴們記得設好鬧鐘,去搶報呀~(去年是名額有限,全靠搶,今年估計也是,大家伙記得快點報名就對了)報名通道將于📅2025年7月23日13&#x…

小玩 Lifecycle

導包 [versions] lifecycle_version "2.3.1"[libraries] androidx-viewmodel { group "androidx.lifecycle", name "lifecycle-viewmodel-ktx", version.ref "lifecycle_version" } androidx-livedata { group "androidx…

HttpSecurity詳解

HttpSecurity 是 Spring Security 中用于配置 HTTP 安全性的核心類。它允許你定義各種安全規則和過濾器,以保護 Web 應用程序中的不同 URL 和請求。下面是對 HttpSecurity 中常見配置的詳細解析,以及每個配置的意義。 1. csrf 配置: http.csrf(customizers -> customi…

FFmpeg+javacpp中仿ffplay播放

FFmpegjavacpp中仿ffplay播放1、[ffplay 基于 SDL 和 FFmpeg 庫的簡單媒體播放器](https://ffmpeg.org/ffplay.html)2、FFmpeg幀捕獲器 : FFmpegFrameGrabber2.1 grabSamples()2.2 grabImage()2.3 grab() 獲取音視頻幀FFmpegjavacppjavacv使用 ffmpeg-6.0\fftools\ffplay.c 1、…

【后端】 FastAPI

🚀 FastAPI 是什么?FastAPI 是一個用于構建 Web API 的 Python 框架。可以理解成:🧰 “一個工具箱,讓你用 Python 寫出能被瀏覽器、App、小程序調用的接口(API)。”🔧 那什么是 API&…

不畫一張架構圖講透架構思維

👉目錄1 架構的定義2 架構是為了解無解的問題-分工3 抱殘守缺的好架構應該是怎樣的4 適可而止的設計、恰如其分的架構與成敗論英雄本文深入探討軟件架構的本質與設計方法論,從架構定義演變到現代架構實踐挑戰,系統分析架構設計面臨的業務復雜…

SpringCloudGateWay 使用nacos網關自動負載均衡

安裝好nacos后(參考以前文章SpringCloud 使用nacos注冊服務,使用openFeign調用服務-CSDN博客) 新建一個項目,添加 spring-cloud-starter-gateway-server-webmvc spring-cloud-loadbalancer spring-cloud-starter-alibaba-nacos-d…

Hiredis 構建 Redis 命令實戰指南

一、同步命令構造 1.1 redisCommand(fmt, …) 最常用的同步接口即 redisCommand,其原型如下: void *redisCommand(redisContext *c, const char *format, ...);參數 c:已連接的 redisContext*format:與 printf 類似的格式字符串//…

【數據庫】國產數據庫的新機遇:電科金倉以融合技術同步全球競爭

7月15日,國產數據庫廠商中電科金倉(北京)科技股份有限公司(以下簡稱“電科金倉”)在北京舉行了一場技術發布會,集中發布四款核心產品:AI時代的融合數據庫KES V9 2025、企業級統一管控平臺KEMCC、…