最近在做基于opencv的课设项目,参考了很多篇教程,retry了很多次。我的编译和配置过程大多数参考这篇文章。
一、准备工具
1. 系统:Win10 64位
opencv_contrib的版本一定要和opencv相同!!!
选择Binary distributions是它已经编译好了的cmake,根据自己的计算机和VS位数选择对应版本,我的是win10 64位,VS2015 64位
5. VS2015(我的是64位的community版本)
二、Cmake编译
1. 在opencv文件夹下新建一个mybuild文件夹(命名任意),存放我们的编译结果
2. 安装cmake,打开bin目录下的cmake-gui.exe
在where is the source code输入opencv地址/sources地址
在where to build the libraries输入保存编译结果的地址
点击Configure选择对应自己电脑上的VS版本的编译器,对于VS2015来说,32位的选择Visual Studio 14 2015,64位的选择Visual Studio 14 2015 Win64,点击finish后自动进行第一次编译
3. 第二次编译
第一次编译完成后会显示编译opencv所需要的参数。在Name为OPENCV_EXTRA_MODULES_PATH的Value中填入opencv_contrib-3.0.0的路径/modules,如下图所示。然后点击Configure进行第二次编译。
第二次编译完后一定要检查一下参数列表,如果参数列表还有红色标记的条目,就再尝试几次configure,直到所有条目都是白色为止。
4. 点击Generate,直到出现Generate Done
这时候在我们的mybuild文件夹下可以看到编译出的文件。
5. 检查一下附加模版是否成功编译并加入到opencv中
进入之前我们新建的mybuild文件夹下,进入modules,查看是否有下图所示的文件,这些是属于附加模块opencv_contrib的。如果没有,检查一下cmake参数列表中Name为OPENCV_EXTRA_MODULES_PATH的Value是否为opencv_contrib-3.0.0的路径/modules,不是的话重新设置、重新Configure以及重新Generate。
三、生成库文件
1. 在mybuild文件夹中,找到OpenCV.sln并打开
2. 在解决方案资源管理器中找到CMake Targets,右键点击“生成”
生成成功后,如果在mybuild文件夹中还没有出现一个名为install的文件夹,回到VS界面,右击INSTALL->仅用于项目->仅生成INSTALL,再次生成成功后就会出现install文件夹。
问题:无法打开文件‘python27_d.lib’ && 无法打开文件‘python36_d.lib’
生成INSTALL时,我碰到过下面的问题(当时忘记截图了),问题是:无法打开文件‘python27_d.lib’和无法打开文件‘python36_d.lib’
原因是我之前在电脑上安装了Anaconda2和Anaconda3,openCV用Cmake编译时都检测到了。解决方法是分别打开python2和python3对应的pyconfig.h文件,做两处修改。
如python2对应的pyconfig.h:
如果python3对应的也有问题的话也将其对应的pyconfig.h做以上修改。
四、配置
1. 系统环境变量
在计算机-环境变量-path中增加:where to build the binaries中设置的路径\install\x64\vc14\bin
注意:如果是32位的VS的话,路径应该是where to build the binaries中设置的路径\install\x86\vc14\bin
2. 配置新的工程
打开VS2015,新建一个工程
找到属性管理器->Debug|x64->右击Microsoft.Cpp.x64.user->属性
1. VC++目录-包含目录
1
2
3\install\include
\install\include\opencv
\install\include\
2. VC++目录-库目录
1\install\x64\vc14\lib
3. 链接器-输入-附加依赖项
这里添加的.lib文件都需要出现在\install\x64\vc14\lib 中。如果lib文件被添加到附加依赖项里,但是上述文件夹中没有该lib文件,会出现找不到XXX.lib的错误。
附上我的附加依赖项(共44个):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44opencv_aruco341d.lib
opencv_bgsegm341d.lib
opencv_bioinspired341d.lib
opencv_calib3d341d.lib
opencv_ccalib341d.lib
opencv_core341d.lib
opencv_datasets341d.lib
opencv_dnn341d.lib
opencv_dnn_objdetect341d.lib
opencv_dpm341d.lib
opencv_face341d.lib
opencv_features2d341d.lib
opencv_flann341d.lib
opencv_fuzzy341d.lib
opencv_hfs341d.lib
opencv_highgui341d.lib
opencv_imgcodecs341d.lib
opencv_imgproc341d.lib
opencv_img_hash341d.lib
opencv_line_descriptor341d.lib
opencv_ml341d.lib
opencv_objdetect341d.lib
opencv_optflow341d.lib
opencv_phase_unwrapping341d.lib
opencv_photo341d.lib
opencv_plot341d.lib
opencv_reg341d.lib
opencv_rgbd341d.lib
opencv_saliency341d.lib
opencv_shape341d.lib
opencv_stereo341d.lib
opencv_stitching341d.lib
opencv_structured_light341d.lib
opencv_superres341d.lib
opencv_surface_matching341d.lib
opencv_text341d.lib
opencv_tracking341d.lib
opencv_video341d.lib
opencv_videoio341d.lib
opencv_videostab341d.lib
opencv_xfeatures2d341d.lib
opencv_ximgproc341d.lib
opencv_xobjdetect341d.lib
opencv_xphoto341d.lib
五、激动人心的时刻——测试
配了这么久,进了好多坑,终于到检验自己的时刻了!
在项目中新建一个cpp,记得添加到工程里。输入如下代码:
1
2
3
4
5
6
7
8
9
10
11
12#include
#include
#include
using namespace cv;
int main()
{
Mat img = imread("F:\\Object Tracking\\opencv_test\\timg.jpg");//读入一张图片
namedWindow("Test"); //创建一个名为Test窗口
imshow("Test", img); //窗口中显示图像
waitKey(5000); //等待5000ms后窗口自动关闭
}
Well Done!