当前位置: 首页 > news >正文

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.dtcms.com/a/293789.html

相关文章:

  • 人工智能——Opencv图像色彩空间转换、灰度实验、图像二值化处理、仿射变化
  • 腾讯iOA:企业软件合规与安全的免费守护者
  • 建数仓该选大SQL还是可视化ETL平台?
  • kotlin基础【2】
  • kettle 8.2 ETL项目【一、初始化数据库及介绍】
  • UniappDay01
  • Django学习之旅--第13课:Django模型关系进阶与查询优化实战
  • 傅里叶转换(机器视觉方向)
  • Oracle19c HINT不生效?
  • Unreal5从入门到精通之使用 Python 编写虚幻编辑器脚本
  • WWDC 25 给自定义 SwiftUI 视图穿上“玻璃外衣”:最新 Liquid Glass 皮肤详解
  • 设备虚拟化——软堆叠技术
  • CNN正则化:Dropout与DropBlock对比
  • iOS开发 Swift 速记7:结构体和类
  • ToBToC的定义与区别
  • js面试题 高频(1-11题)
  • split() 函数在 Java、JavaScript 和 Python 区别
  • HUAWEI Pura80系列机型参数对比
  • 自学嵌入式 day33 TCP、HTTP协议(超文本传输协议)
  • MySQL深度理解-深入理解MySQL索引底层数据结构与算法
  • Hexo - 免费搭建个人博客03 - 将个人博客托管到github,个人博客公开给大家访问
  • Day01_C++
  • 基于 MaxScale 实现 MySQL 读写分离
  • 使用Imgui和SDL2做的一个弹球小游戏-Bounze
  • 3.6 常见问题与调试
  • 编程语言Java——核心技术篇(二)类的高级特性
  • Semantic Kernel实现调用Kernel Memory
  • 华为云数据库 GaussDB的 nvarchar2隐式类型转换的坑
  • Python-初学openCV——图像预处理(一)
  • C++刷题 - 7.23