opencv移植

1 简介

本机环境:windows10 64位;QT:5.14.2 ;本次移植不涉及源码编译,直接使用的编译好的源码。

2 MINGW编译环境

2.1 库文件下载

编译好的库文件下载地址:IJustLoveMyself/OpenCV-MinGW-Build: 👀 MinGW 32bit and 64bit version of OpenCV compiled on Windows. Including OpenCV 3.3.1, 3.4.1, 3.4.1-x64, 3.4.5, 3.4.6, 3.4.7, 3.4.8-x64, 3.4.9, 4.0.0-alpha-x64, 4.0.0-rc-x64, 4.0.1-x64, 4.1.0, 4.1.0-x64, 4.1.1-x64, 4.5.0-with-contrib, 4.5.2-x64 (github.com)

选择根据configuration的信息尽量选择合适的文件进行下载,我的编译器时MINGW73,一次我选择了4.5.0的下载。下载后解压。

在这里插入图片描述

2.2 添加库
  • 新建一个QT工程,我选择的库是使用mingw32-make.exe编译的,因此我建立工程选择的构建套件是MINGW 32-bit。
  • 在工程的目录下面新建一个文件夹opencv,用于存放相关文件。
  • 复制OpenCV-MinGW-Build-OpenCV-4.5.0-with-contrib\x64\mingw下的lib文件夹至opencv文件夹下面
  • 复制OpenCV-MinGW-Build-OpenCV-4.5.0-with-contrib下的include文件夹至opencv文件夹下面
  • OpenCV-MinGW-Build-OpenCV-4.5.0-with-contrib\x64\mingw\bin这个文件夹有两种处理方式,第一种:加入系统的环境变量,第二种:复制到我们每一个新建的工程中去,因为我只是这一个项目需要用,所以我用的是第二种方式。

最终我的目录结构大致如下

opencvtest
|_opencvtest\build-opcvtest-Desktop_Qt_5_14_2_MinGW_32_bit-Debug
|_opcvtest|_opencv|_include|_lib|_main.cpp|_mainwindow.cpp|_mainwindow.h|_mainwindow.ui|_opcvtest.pro
2.3 修改.pro文件

在pro文件中添加如下,导入库文件。

opencv += $$PWD/opencv/INCLUDEPATH += \$${opencv}/includeLIBS += \$${opencv}/lib/libopencv_*.a
2.4 运行测试

运行前需要将OpenCV-MinGW-Build-OpenCV-4.5.0-with-contrib\x64\mingw\bin加入环境变量,如果不想加入环境变量,就将bin文件夹下面的dll文件都复制到opencvtest\build-opcvtest-Desktop_Qt_5_14_2_MinGW_32_bit-Debug\debug下,如果是release运行的,则复制到opencvtest\build-opcvtest-Desktop_Qt_5_14_2_MinGW_32_bit-Release\release下面

测试代码如下

#include "mainwindow.h"#include <QApplication>#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>using namespace cv;int main(int argc, char *argv[])
{QApplication a(argc, argv);Mat img = imread("E:\\work\\HMPTest\\usb_camera\\middleware\\libjpeg-turbo\\src\\testimages\\testimgari.jpg",1);namedWindow("Output",WINDOW_AUTOSIZE);imshow("Output",img);return a.exec();
}

执行结果:

在这里插入图片描述

  • 问题点:程序没有报错,显示程序异常退出。

  • 可能是因为库文件路径问题,检查是否将bin文件加入了环境变量或者将bin文件夹下的dll文件复制到正确的地方。另外注意下载的版本是否正确,我第一次下载的4.5.5那个文件,也出现了这个问题。

  • 问题点:显示E:undefined reference to `cv::imread(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, int)’

  • 构建套件选择不匹配,选择了MINGW 64-bit

3 MSVC2017

opencv的官网已经提供了MSCV编译好的库文件,我们只需要根据环境下载对应的文件就好了。

3.1 opencv选择与下载

opencv与msvc的对应关系如下

vc10 = Visual Studio 2010
vc11 = Visual Studio 2012 
vc12 = Visual Studio 2013
vc14 = Visual Studio 2015
vc15 = Visual Studio 2017
vc16 = Visual Studio 2019
vc17 = Visual Studio 2022opencv支持情况:
OpenCV2.4.10 支持 VS2010,VS2012,VS2013 (x64,x86)
OpenCV2.4.13 支持 VS2012,VS2013 (x64,x86)
OpenCV3.0 支持 VS2012,VS2013 (x64,x86)
OpenCV3.1 支持 VS2013,VS2015(x64)取消了对32位的支持
OpenCV3.2 支持 VS2015(x64)
OpenCV3.4 支持 VS2015,VS2017(x64)
OpenCV4.1 支持 VS2015,VS2017(x64) 增加了神经网络的支持
OpenCV4.4 支持 VS2015,VS2017(x64)
OpenCV4.5 支持 VS2017,VS2019(x64)
OpenCV4.6 支持 VS2017,VS2019(x64)
OpenCV4.7 支持 VS2019(x64)
OpenCV4.7 支持 VS2022(x64)

我下载的是4.6,因为我电脑上过的是MSVC2017,MSVC2017的安装请参考Ethercat学习-QT添加SOEM主站_qt ethercat-CSDN博客

下载后解压,可以看到包含两个文件夹一个build,一个source,我们要用到的文件就在buiid文件夹下。

3.2 库文件添加
  • 新建一个QT工程,建立工程选择的MSVC2017 64-bit。
  • 在工程的目录下面新建一个文件夹opencv,用于存放相关文件。
  • 复制build\x64\vc15下的lib文件夹至opencv文件夹下面
  • 复制build下的include文件夹至opencv文件夹下面
  • build\x64\vc15\bin这个文件夹有两种处理方式,第一种:加入系统的环境变量,第二种:复制到我们每一个新建的工程中去,因为我只是这一个项目需要用,所以我用的是第二种方式。
3.3 修改.pro文件

在pro文件中添加如下,导入库文件。

opencv += $$PWD/opencv/INCLUDEPATH += \$${opencv}/IncludeLIBS += \$${opencv}/lib/opencv_world460d.lib
3.4 运行测试

运行前需要将build\x64\vc15\bin加入环境变量,如果不想加入环境变量,就将bin文件夹下面的dll文件都复制到opencvtest\build-opcvtest-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug\debug下,如果是release运行的,则复制到opencvtest\build-opcvtest-Desktop_Qt_5_14_2_MSVC2017_64bit-Release\release下面

测试代码与执行结果请参考 2.4章节。

问题点: 运行时出现global c:\build\master_winpack-build-win64-vc15\opencv\modules\imgcodecs\src\loadsave.cpp (239) cv::findDecoder imread_ 并弹出如下图错误,且图像时黑色的。

在这里插入图片描述

网上的解释是因为我们刚开始的时候同时导入了opencv_world460.lib和opencv_world460d.lib。如下所示

opencv += $$PWD/opencv/INCLUDEPATH += \$${opencv}/IncludeLIBS += \$${opencv}/lib/opencv_world460d.lib\$${opencv}/lib/opencv_world460.lib

我们需要在debug的时候使用只opencv_world460d.lib,在release的时候只使用opencv_world460.lib。或者将使用的那个放在前面。最后再重新构建然后运行。

/lib/opencv_world460d.lib
$${opencv}/lib/opencv_world460.lib


我们需要在debug的时候使用只opencv_world460d.lib,在release的时候只使用opencv_world460.lib。或者将使用的那个放在前面。最后再**重新构建**然后运行。

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

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

相关文章

SPRING07_自动装配如何加强、@Autowired注解debug分析、总结

文章目录 ①. Spring启动一行代码:②. ApplicationContex增强功能③. 自动装配如何装配进来④. Autowired自动注入细节xml版⑤. Autowired注解版分析⑥. 总结一下 ①. Spring启动一行代码: ①. 创建一个IOC容器,传入容器的xml配置文件,Spring在整个创建容器的过程中全部都准备…

日期类比较大小和加减

日期比较大小 先定义一个日期类&#xff0c;这里包含年月日&#xff0c;这里头文件和源文件分离 重载符号 1.operator> 先声明函数 这里大于可以把*this> d 的情况全部列举出来 bool date::operator>(const date& d) {if (_year > d._year){return true;}e…

总要去趟沙漠吧:中卫沙坡头

周五 下班出发 西安 -> 固原 周六 疯狂的一天 陕甘宁蒙 沙坡头 集大漠、黄河、高山、绿洲为一处&#xff0c;具西北风光之雄奇&#xff0c;兼江南景色之秀美。有中国最大的天然滑沙场&#xff0c;有横跨黄河的“天下黄河第一索”&#xff0c;有黄河文化代表古老水车&#…

观测云突变告警,精准预测云原生的系统异常

背景 观测云 DataKit 是一个强大的数据采集工具&#xff0c;能够收集和监控容器化环境和 Kubernetes 集群的指标、对象和日志数据。通过灵活使用 DataKit 收集的数据&#xff0c;可以对 Kubernetes 集群进行深入的监控和分析&#xff0c;从而实现更好的运维和优化。以下是一些…

FRTIMP_YTFRB_WEB

FRTIMP_YTFRB_WEB 林业资源交易信息管理平台

Docker相关配置记录

Docker相关配置记录 换源 {"registry-mirrors": ["https://dockerhub.icu","https://docker.chenby.cn","https://docker.1panel.live","https://docker.awsl9527.cn","https://docker.anyhub.us.kg","htt…

网络通信之套接字

TCP服务端代码实现 #include<myhead.h> #define SER_POST 6666 //服务器端口 #define SER_IP "192.168.36.172"//服务器ip int main(int argc, const char *argv[]) {//1.创建套接字int sfd socket(AF_INET,SOCK_STREAM,0);//参数1&#xff1a;通信域//参数2…

零基础5分钟学会谷歌云GCP核心云架构技能 - 成本分析篇

简介&#xff1a; 欢迎来到小李哥谷歌云GCP云计算知识学习系列&#xff0c;适用于任何无云计算或者谷歌云技术背景的开发者&#xff0c;让大家零基础5分钟通过这篇文章就能完全学会谷歌云一个经典的服务开发架构方案。 我将每天介绍一个基于全球三大云计算平台&#xff08;AW…

AI赋能周界安防:智能视频分析技术构建无懈可击的安全防线

周界安全防范是保护机场、电站、油库、监狱、工业园区等关键设施免受非法入侵和破坏的重要措施。传统的周界安防手段主要依靠人员巡查和物理屏障&#xff0c;但这种方式不仅人力成本高&#xff0c;而且效率较低&#xff0c;难以满足日益复杂多变的安全需求。随着AI技术的引入&a…

windows10和linux(debian12)设置静态ip————附带详细过程

文章目录 0 背景1 linux&#xff08;debian&#xff09;1.1 查看网络配置1.2 获取ip动态分配下的配置1.3 打开网络配置文件1.4 重新启动网络服务1.5 验证设置 2 windows2.1 查看自动获取ip地址下的配置2.2 进行设置 0 背景 因为下位机只能获取固定的ip&#xff08;ip池很小&am…

QT自定义系统快捷键任务

关键代码 //自定义快捷键检测 connect(this->ui->hotkeySequenceEdit_1, &QKeySequenceEdit::keySequenceChanged,this, &HotTestWidget::setShortcut_1);// 托盘显示 trayIcon new QSystemTrayIcon(this); QPixmap pixmap("tray.png"); QIcon icon(…

【网络】IP和MAC地址的映射——ARP协议和ARP欺骗概述

目录 引言 ARP的工作机制 ARP欺骗 ARP欺骗的断网行为 ARP欺骗成为中间人 工具介绍 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 同一子网内不同主机用数据链路层的MAC地址来寻址&#xff0c;而不是子网内的私有IP&#xff08;网络层&#xff09;。数据包中的IP…

JDBC如何避免SQL注入

JDBC如何避免SQL注入 一 . 什么是SQL注入 SQL注入&#xff08;SQL Injection&#xff09;是一种代码注入技术&#xff0c;它允许攻击者将或“注入”恶意的SQL命令到后端数据库引擎执行。这些恶意的SQL命令可以执行未授权的数据库查询、修改数据、管理数据库服务器上的文件系统…

三级_网络技术_20_路由器的配置及使用

1.封禁ICMP协议&#xff0c;只转发212.78.170.166/27所在子网的所有站点的ICMP数据包&#xff0c;正确的access-list配置是()。 Router (config)#access-list 110 permit icmp 212.78.170.166 0.0.0.0 any Router (config)#access-list 110 deny icmp any any Router (confi…

day2-网络连接网卡配置原理

1.window网卡 理解&#xff1a; window 有 2 块网卡 本地网卡 192.168.13.253 用于连接外网 vmnet8 10.0.0.1(装虚拟机自动生成的 如果没有自动生成…) 虚拟机添加 2 块网卡&#xff1a; 第一块网卡 NAT 模式 添加网卡的时候设置 NAT 模式 2 个作用&#xff0c;用于连接 wi…

C++_继承

继承 基础认识 像模板是函数和类代码的复用&#xff0c;而继承是对类代码的复用&#xff0c;都是更多的把复杂的任务交给编译器处理。 使用方法 继承的方式 class的默认继承方式是private&#xff0c;struct的默认继承方式是public&#xff0c;但还是最好加上。 protected成…

C++ 函数模板和类模板

参考视频&#xff1a;C类模板_哔哩哔哩_bilibili 遗留问题&#xff1a;编译器怎么处理函数模板和类模板 目录 一、为什么会有函数模版&#xff1f;函数模板是为了解决什么问题&#xff1f; 二、函数模板的概念 三、函数模版的使用 四、函数模板的特化 五、类模板的概念 …

基于ssm+vue+uniapp的英语学习交流平台小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

排序算法之桶排序

title: 桶排序 date: 2024-7-25 18:58:19 0800 categories: 排序算法 tags:排序算法桶排序 description: 桶排序&#xff08;bucket sort&#xff09;是分治策略的一个典型应用。它通过设置一些具有大小顺序的桶&#xff0c;每个桶对应一个数据范围&#xff0c;将数据平均分配…

Qt—Qtcreator中自定义类时,下拉菜单中没有出现要继承的Qt类

问题描述&#xff1a;Qtcreator中自定义类时&#xff0c;下拉菜单中没有出现要继承的Qt类 这里我想要继承 QLineEdit 类&#xff0c;但是在这个下拉菜单中没有找到 我认为这个是qtcreator版本的问题&#xff0c;因为我直接去 #include 是可以找到这个类的 直接创建出来的类中…