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/

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • app hybrid框架_混合式app

    app hybrid框架_混合式app几种APP开发模式概述当前的APP开发模式注意有以下四大类型:NativeApp 即传统的原生APP开发模式,Android基于Java语言,底层调用Google的API;iOS基于OC或者Swift语言,底层调用App官方提供的API。体验最后。 WebApp 即移动端的网站,将页面部署在服务器上,然后用户使用各大浏览器访问。一般泛指SPA(SinglePa…

  • Ubuntu下deb包的安装方法

    Ubuntu下deb包的安装方法

  • navicat sql 15.23激活码【在线注册码/序列号/破解码】

    navicat sql 15.23激活码【在线注册码/序列号/破解码】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • anaconda卸载后问题

    anaconda卸载后问题anaconda卸载后问题因platformio问题,我将电脑中的anaconda卸载后,出现重新安装anaconda后,无法使用(无conda命令,无jupyter,spyder等图标的问题);经搜索,通过安装miniconda后,用conda命令安装anaconda解决了问题。但除了了使用anacondaprompt时,出现系统找不到指定路径的提示,比较碍眼,(同cmd亦是)。经查,将注册表中的anaconda字符改为miniconda也能解决问题;如下图…

  • 跨域访问是什么_什么是跨域?怎么解决跨域问题

    跨域访问是什么_什么是跨域?怎么解决跨域问题跨域访问是什么同源策略1995年,同源政策由Netscape公司引人浏览器。目前,所有测览器都实行这个政策。同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。随着互联网的发展,“同源政策”越来越严格。目前,如果非同源,共有三种行为受到限制:】Cookie、LocalStorage和IndexDB无法读取DOM无法获得AJAX请求不能发送虽然这些限制是必要的,但是有时很不方便,合理的用途也受到影响。所谓“同源”指的是“三个相同”:协议相同、域名相同以及端相同。域名是什么

  • “xxxxxxxxx”signer information does not match signer information of other classes in the same package

    “xxxxxxxxx”signer information does not match signer information of other classes in the same packageMaven在static方法下测试没问题,请求正常,但是服务启动后出现错误信息。在发起请求时抛出异常信息”xxxxxxxxx”signerinformationdoesnotmatchsignerinformationofotherclassesinthesamepackage操作:1、移除pom下冲突的依赖2、移除libraries项目中导入本地jar文件…

发表回复

您的电子邮箱地址不会被公开。

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