Window系统配置OpenCV3

原文地址:https://anoyer.cn/index.php/archives/75/

前言

疫情带来的“漫长假期”和由于国外疫情的过于严重,导致下半年ICPC区域赛依旧遥遥无期,我最终还是打算为以后找一份好工作做一些准备。因为比较希望可以找一份和图形处理有关的工作,所以趁着现在摸鱼的大好时光,想入手学习一波计算机视觉的我,开始了在OpenCV上的掉头发之路X_X。

通过一些论坛贴吧及B乎大佬了解到一些比较好的入坑书籍吧,最终选择了较为系统800页大书《学习OpenCV3》。22号从狗东入手的这本书,24号上午书便到了,一到手第一件事便是翻看目录(个人比较习惯这样,可以了解到通过本书可以学习到哪些东西)。书和其他书籍一样前面一堆前言,快速看了一遍后,遍来到了入坑预备工作—OpenCV3配置环境。

因为书上环境配置介绍的过于简单(可能是因为我太菜了QAQ)和我在配置中遇到的各种问题,所以我觉得写下这篇文章,对我配置的过程及问题做一个记录,方便日后查看。

下载和安装OpenCV3

在http://opencv.org/downloads.html,可以发现最新的为Windows准备的最新版本OpenCV下载链接。可以通过这个链接下载一个为EXE的文件,该文件会把预编译好的OpenCV解压到你的电脑上,预编译版本支持不同的版本的Visual Studio环境。现在,你很快就可以开始使用OpenCV了。

上面内容摘自《学习OpenCV3》第10页第一段话,事实到这里你才刚刚开始掉入环境配置的坑中。

因为这本书是几年前出版的了,现在http://opencv.org/downloads.html链接已经无法访问了,改为:https://docs.opencv.org/。不仅如此官网下载速度也出奇的慢,所以建议到OpenCV国内快速下载中下载相应版本。我下载的是opencv-3.4.1-vc14_vc15.exe,为啥不下载3.4.10?别问?问就是眼花少看了个0。

下载好后,找一个合适的盘安装就可以了,我安装在了D盘。

环境配置及关联Visual Studio项目

在我们OpenCV3安装路径下有两个文件夹,源代码文件source及编译好的OpenCV的环境文件build。在Build\x64中会有文件夹vc14vc15,分别对应的是Visual Studio 2015和Visual Studio 2017的用的OpenCV3版本。如果你这个时候你和我一样用的是Visual Studio 2013或者更低版本的Visual Studio,那么你便需要使用CMake手动编译OpenCV的源代码生成符合自己Visual Studio的环境了,详细步骤见OpenCV3编译。

下面环境配置实例Visual Studio版本号为为2013,所以我将使用的是vc12,具体根据自己VS版本而定。

添加环境变量

首先我们需要将vc12\bin添加到系统环境变量path中,这里我使用的是自己编译vc12,路径为opencv_vs2013_x64\install\x64\vc12\bin

创建新的项目,配置OpenCV3.4.1

1、配置项目属性页中VC++目录的包含目录及库目录

https://img.vim-cn.com/65/cbcb14543ef624c9e77fdad6d4259a8623d382.png

(1)包含目录

D:\OpenCV3.4.1\opencv_vs2013_x64\install\include
D:\OpenCV3.4.1\opencv_vs2013_x64\install\include\opencv
D:\OpenCV3.4.1\opencv_vs2013_x64\install\include\opencv2

(2)库目录

D:\OpenCV3.4.1\opencv_vs2013_x64\install\x64\vc12\lib

(3)附加依赖项

Debug模式附加依赖项

在这里插入图片描述

注意每个lib文件末尾341d表示的是3.4.1版本的Debug模式,所以341根据自己安装的OpenCV版本号进行修改

opencv_calib3d341d.lib
opencv_core341d.lib
opencv_dnn341d.lib
opencv_features2d341d.lib
opencv_flann341d.lib
opencv_highgui341d.lib
opencv_imgcodecs341d.lib
opencv_imgproc341d.lib
opencv_ml341d.lib
opencv_objdetect341d.lib
opencv_photo341d.lib
opencv_shape341d.lib
opencv_stitching341d.lib
opencv_superres341d.lib
opencv_video341d.lib
opencv_videoio341d.lib
opencv_videostab341d.lib

Release模式附加依赖项

opencv_calib3d341.lib
opencv_core341.lib
opencv_dnn341.lib
opencv_features2d341.lib
opencv_flann341.lib
opencv_highgui341.lib
opencv_imgcodecs341.lib
opencv_imgproc341.lib
opencv_ml341.lib
opencv_objdetect341.lib
opencv_photo341.lib
opencv_shape341.lib
opencv_stitching341.lib
opencv_superres341.lib
opencv_video341.lib
opencv_videoio341.lib
opencv_videostab341.lib
项目环境平台修改为X64平台

因为默认建的项目实win32,但是这里我生成的是x64的环境,所以需要在项目属性页将平台选为X64。若无此选项,则点击配置管理器,选择X64平台,若无则新建一个X64平台并选中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qdLZmCmq-1590985110742)(#pic_center)]

开始你第一个OpenCV程序
#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace std;
int main(int argc,char **argv)
{
	cv::Mat image = cv::imread("C:/Users/Administrator/Desktop/tqzz.jpg");
	cv::namedWindow("天气之子", CV_WINDOW_FREERATIO);
	cv::imshow("天气之子", image);
	cv::waitKey(0);
	return 0;
}

如果项目运行时出现“无法启动此程序,因为计算机中丢失opencv_cored341.dll”等类似错误提醒,是因为你配置的环境变量,没有生效,重启电脑后,再次运行程序就不会出现这个问题了。

在这里插入图片描述

OpenCV3编译

工具:CMake

编译步骤

首先下载CMake并解压,然后我们在OpenCV目录下面新建一个名为opencv_vs2013_x64文件夹。运行CMake文件目录里bin文件下的cmake-gui.exe文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rQQJxQ2w-1590666534581)()]

第一个选择栏选中前面说的OpenCV源代码文件夹,第二个选择栏选择刚刚新建的opencv_vs2013_x64

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kZxSxEIt-1590985210533)()]

点击软件界面左下角的Configure,会出现下述界面。选择你所需要的编译器和解决方案版本。这里我们用的是vs2013,其中“Visual Studio 12 2013”指编译成32位的,“Visual Studio 12 2013 Win64”指编译成64位的,根据需要而选择。选择后点击“Finish”,开始下载相应函数库,此过程需要等好长一段时间。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NJeS69FD-1590666534585)()]

第一次Configure完成后,会出现红色部分。这是为了让用户可以手动补充相应函数库,如TBB、CUDA、Eigen等,这里视你的需求而定,若需要其他库,请自行下载相应库,并自行配置库的include和lib。如果无需CUDA版本,可将WITH_CUDA的选项取消。然后再一次Configure(一般共需要两次Configure),等待一会,就会看到configuring done信息提示,表示配置成功。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gBZQ1CI6-1590666534586))]

点击Generate,生成OpenCV源代码的Visual Studio解决方案。当出现Generating done的提示,即表明解决方案生成成功。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OLmx5Cu5-1590985268029)(https://img.vim-cn.com/72/679bc93813505681bc40fb5d812bdb85f28fbd.png)]

最后点击Open Project,打开解决方案。
到这里已经完成第一步了,下面只需按下面步骤进行编译便可以得到vc12文件及相应函数库。

解决方案完全打开后(注意VS下面读条),先将解决方案修改为Debug模式,然后右击All_BUILD,选择生成(此过程需要一段时间)。生成成功后,右击INSTALL,选择生成,生成成功后,会在“opencv_vs2013_x64”目录中生成“install”目录,里面就是我们所需要的,同时opencv_vs2013_x64文件夹下的其他文件都可以删除了,保留install便可以。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ttx00ElE-1590666534590)()]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bHDY1klV-1590666534591)()]

编译遇到的问题

在编译过程中能会出现以下错误:

源代码报错:char *不能接受const char *

可以定位到报错的代码语句,在const char*前面套上const_cast(char*)(...),将const char* 强转为char*

这个错误我第一次编译便遇到了,因为当时没有截图,所以没有图片。

无法打开python27.lib或python37.lib类错误

造成该类错误的原因是因为编译opencv_python2或者opencv_python3是他不知道去哪里找python27.libpython37.lib(不一定是27和37,对应的是你电脑中python版本号)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GAbDQLrg-1590666534592)()]

解决方案便是对opencv_python2或者opencv_python3右键选择属性,然后在VC++目录中的库目录里选择编辑加上对应的python的libs文件夹路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h4pliFbT-1590666534595)()]

加完重新编译,你就会发现错误消失了。

无法打开python27_d.lib或python37_d.lib类错误

产生这类错误的原因是因为我们一般下载的python是release版的,会缺少python27_d.libpython27_d.dll文件。怎么办呢?我们可以自己伪造一个缺失的文件,操作如下:(这里拿python27举例)

python27.dllpython27.lib都拷贝一份并重命名为python27_d.libpython27_d.dll

然后在修改python安装路径\include下的 pyconfig.h, object.h

  • 修改pyconfig.h

找到下面代码段

#ifdef _DEBUG
# define Py_DEBUG
#endif

将其修改为:

#ifdef _DEBUG
//# define Py_DEBUG
#endif

找到下面代码段

# ifdef _DEBUG
# pragma comment(lib,"python27_d.lib")
# else
# pragma comment(lib,"python27.lib")
# endif /* _DEBUG */

将其修改为:

# ifdef _DEBUG
# pragma comment(lib,"python27.lib")
# else
# pragma comment(lib,"python27.lib")
# endif /* _DEBUG */
  • 修改object.h

找到下面代码段

#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
#define Py_TRACE_REFS
#endif

修改为:

#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
// #define Py_TRACE_REFS
#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值