windows安装opencv(opencv安装不了)

终于实现了在windows下配置Qt和opencv,从刚学opencv尝试,到现在终于配置成功,断断续续经历了一年左右,真实操碎了心。。。走了太多弯路了系统:windows10Qt:Qt5.11.1,mingw5.3版本opencv:3.2.0版本一直有用最新软件的强迫症,这次屈服了,没有使用opencv3.4.2版本,本人尝试了2.7.13版本到3.4.2版本的所有opencv,…

大家好,又见面了,我是你们的朋友全栈君。

终于实现了在windows下配置Qt和opencv,从刚学opencv尝试,到现在终于配置成功,断断续续经历了一年左右,真实操碎了心。。。走了太多弯路了

系统:windows10
Qt:Qt5.11.1,mingw5.3版本
opencv:3.2.0版本

一直有用最新软件的强迫症,这次屈服了,没有使用opencv3.4.2版本,本人尝试了2.7.13版本到3.4.2版本的所有opencv,花了一天时间,加上今天在官方教程最终完成配置,经过个人血的教训,说明以下几点:
(1)3.3版本之后编译要C++11支持,否则会报错error: 'nullptr' was not declared in this scope,解决办法是cmake设置flags -std=c++11
(2)3.3版本之后编译sources/modules/videoio/src/cap_dshow.cpp报错error : 'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' was not declared in this scope ... ,解决办法是在sources/modules/videoio/src/cap_dshow.cpp添加宏定义#define STRSAFE_NO_DEPRECATE (官网教程是添加#define NO_DSHOW_STRSAFE ,笔者没有测试了,是在网上其他地方找到的答案)
(3)在opencv相关问答网站http://answers.opencv.org/question/192758/compile-error-when-compiling-for-windows-341-dev/是看到这样一段话

if you are using a 64 bit os, you should use mingw64, not the 32bit one (530 might also be too old !)
you have to disable WITH_MFMS (media foundation needs special win sdk, only available for VS)
ENABLE_PRECOMPILED_HEADERS=OFF
WITH_IPP=OFF WITH_TBB=OFF (again libs available are for VS only)
,就是在cmake设置的时候要关闭一些没用的选项

(4)遇过编译完成了,在install的时候报错,提示类似无法编译opencv_python的错误,具体错误没有保存,如果有读者遇到这种错误可以把cmake的选项build_opencv_python 去掉

(5)opencv2.7版本不支持Qt5
(6)编译opencv3.1版本很顺利,但还是无法在Qt上使用,可能是添加的库的问题,没有再试了。

今天在博客https://blog.csdn.net/qq_40680049/article/details/81436663里看到了官网关于配置opencv的介绍,用的是Qt5.9和opencv3.2,因此规规矩矩地重新按照教程走了一遍,重要可以在Qt上使用opencv了,不过也出现了一些小问题。

严重推荐!!!
官方教程:https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows

笔者前面踩过的坑教程里面就有提醒,教程中需要注意的几个地方就是cmake选项要正确,安装完成以后把bin目录添加到环境变量。

在修改pro文件那一步有一个注意的地方,就是添加的LIBS是bin目录下的,我之前都是用的lib目录就一直出错
这里写图片描述

pro文件:

#-------------------------------------------------
#
# Project created by QtCreator 2018-08-29T14:01:18
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = mingw_opencv
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0


SOURCES += \         main.cpp \         mainwindow.cpp

HEADERS += \         mainwindow.h

FORMS += \         mainwindow.ui

INCLUDEPATH += F:\qtbuild3.2\install\include
# 注意这里添加的bin目录下的
LIBS += F:\qtbuild3.2\install\x86\mingw\bin\libopencv_core320.dll
LIBS += F:\qtbuild3.2\install\x86\mingw\bin\libopencv_highgui320.dll
LIBS += F:\qtbuild3.2\install\x86\mingw\bin\libopencv_imgcodecs320.dll
LIBS += F:\qtbuild3.2\install\x86\mingw\bin\libopencv_imgproc320.dll
LIBS += F:\qtbuild3.2\install\x86\mingw\bin\libopencv_features2d320.dll
LIBS += F:\qtbuild3.2\install\x86\mingw\bin\libopencv_calib3d320.dll

测试代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // read an image
    cv::Mat image = cv::imread("D:\\Files\\qt\\mingw_opencv\\lena.jpg", 1);
    if (image.empty())
        printf("读取图片错误!");
    // create image window named "My Image"
    cv::namedWindow("My Image");
    // show the image on window
    cv::imshow("My Image", image);
}

MainWindow::~MainWindow()
{
    delete ui;
}

在测试opencv的时候,使用opencv打开一张图片,图片的路径名一定要正确填写,即使在工程中添加了资源文件,直接使用是会报错的,不知道是opencv的问题还是Qt的问题,windows路径在Qt中处理有点麻烦,比如笔者的一张图片,使用windows的复制路径功能得到D:\Files\qt\mingw_opencv\lena.jpg ,直接使用这个路径运行会报错
这里写图片描述
需要更改为"D:\\Files\\qt\\mingw_opencv\\lena.jpg"

目前算上基本完成了,强迫症还在,有时间就配置一下最新版opencv

参考链接:
(1)https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows
(2)https://blog.csdn.net/qq_40680049/article/details/81436663
(3)https://blog.csdn.net/scien2011/article/details/52830794
(4)https://blog.csdn.net/lucksis/article/details/60580861
(5)http://answers.opencv.org/question/192758/compile-error-when-compiling-for-windows-341-dev/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129313.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月13日 下午4:40
下一篇 2022年4月13日 下午4:40


相关推荐

  • Pytest(11)allure报告[通俗易懂]

    Pytest(11)allure报告[通俗易懂]前言allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的报告界面。mac环境:

    2022年7月29日
    12
  • OmniDiskSweeper清理系统文件

    OmniDiskSweeper清理系统文件公司发的电脑只有 250G 经常因 JetBrains 全家桶装多了磁盘都快爆了 更不要打开多个 IDE 内存不够的时候还要刷到 swap 总之电脑经常崩溃 一查存储空间发现系统经常性达到 180G 应用 30G 装完就没多少剩下来了 印象中 MacOS 系统文件不该这么大 后来查了一下发现是之前本地调试 Docker 的时候 安装了 DockerforMac 把镜像文件存储路径放在 Users xxx Library 这个目录下了 导致这部分文件归到系统里去了 推荐 OmniDiskSwee 这个

    2026年3月19日
    3
  • matlab plotyy 标注,Matlab关于plotyy 标注 legend 的问题[通俗易懂]

    matlab plotyy 标注,Matlab关于plotyy 标注 legend 的问题[通俗易懂]我用plotyy做了一个图,想用legend标注图形,但是还想只能标注一个,我的原始程序时这样的[AX,H1,H2]=plotyy(xx,c,xx,p8);set(get(AX(1),’Ylabel’),’String’,’地面水汽压e/(hpa)’,’color’,’k’,’linewidth’,1.2)set(get(AX(2),’Ylabel’),’String’,’大气可降水量W/…

    2022年6月18日
    32
  • qt 实现的 lua 编辑器

    qt 实现的 lua 编辑器还不太熟悉 lua 编程 要求实现一个 lua 编辑器网上找了个 qt 写的 c 编辑器 在此基础上改的 nbsp 基本功能实现了 lua 编程需求该软件为 lua 编辑编译器 编译需要 lua 支持 该软件是基于 QtCreator4 7 编写的要软件正常运行需要 qt 的动

    2026年3月18日
    2
  • kafka 集群搭建步骤

    kafka 集群搭建步骤  kafka集群的运行建立在zookeeper基础上,kafka中的消息偏移量信息、kafka集群信息、topic等信息会被存储在zookeeper中。高版本的kafka自带了zookeeper,本文使用独立的zookeeper集群部署kafka集群。前期准备见《Linux环境下,搭建ZooKeeper集群》。一、下载kafka  kafka官网:http://kafka.apache.org/http://kafka.apache.org/downloa

    2022年4月30日
    43
  • 何为泛型擦除

    何为泛型擦除何为泛型擦除要理解泛型的擦除 首先要知道泛型的产生 泛型是 JDK1 5 才添加到 Java 中的 也就是说 JDK1 5 之前是没有泛型这一说的 例如 Comparable 接口在 JDK1 5 之前是如下定义的 publicinterf publicintcom Objecto 在 JDK1 5 或之后就采用了泛型 具体如下 publi

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号