Windows VS2015配置OpenCV2.4.13 新手指南(C/C++)

来源:互联网 发布:上海联通网络测速 编辑:程序博客网 时间:2024/06/10 18:34

本文篇幅长, 链接较多, 建议结合目录查看.
该配置只使用OpenCV现成库, 适合新手操作.
实际上还有编译自定义库的配置方法, 在 官方指南(英文): 从源文件创建自定义库 中有详细指导, 过程较复杂, 笔者能力有限, 不在本文展开.


以下操作均参考自官网: Introduction to OpenCV

1.下载并安装OpenCV

在 OpenCV下载页(官网)下载2.4.13的任意版本(示例用的是2.4.13.3)
· 下载链接:
OpenCV-2.4.13.3-vc14
OpenCV-2.4.13.2-vc14
OpenCV-2.4.13
运行并指定安装目录(建议安装在短路径下以便于访问, 不建议放在系统盘)
假设你安装到了 D:\
那么会建立目录 D:\opencv (后续步骤将沿用此路径)
· opencv目录下会有2个文件夹(buildsources),简单配置只会用到build, 而自定义库还会用到sources.
如果打开build,你会看到以下目录
opencv->build
· 对于C/C++,我们只会用到include, x86x64.
其中x64与x86里都装着vc14(vc14是什么意思?)运行OpenCV必需的二进制文件(\bin目录下)与 库文件(\lib\staticlib目录下).

2.设置系统 环境变量

2-1. 新建 OpenCV_DIR

打开 此电脑->属性->更改设置->高级->环境变量, 在系统变量列表中 新建 (示例用的是32位系统所以用x86下目录, 而D:\应修改为你的安装路径 )
· 注意: 32位系统用\x86\vc14, 64位系统用\x64\vc14, 不要混用.
新建系统变量OpenCV_DIR
· 事实上新建OpenCV_DIR还可以用CMDPowerShell输入以下命令之一来实现:

setx -m OPENCV_DIR D:\OpenCV\Build\x86\vc14setx -m OPENCV_DIR D:\OpenCV\Build\x64\vc14

· 但是下面Path的编辑不要用命令行(除非你记得Path原先的内容)! 因为setx会彻底重写Path!
详见: 用setx设置永久环境变量及注意事项

2-2. 编辑 Path:

打开 此电脑->属性->更改设置->高级->环境变量, 在系统变量列表中找到变量Path,打开它进行编辑
· 如果是文本式编辑, 要在变量值末尾添加 %OPENCV_DIR%\bin; (注意有分号结尾, 如果原先的末尾没有分号还要补个分号再加新变量值)
文本式
· 如果是图表式,直接在空白处双击添加%OPENCV_DIR%\bin (注意没有分号)图表式

3.设置VS2015 项目属性

3-1. 基本设置

打开/新建一个C/C++项目, 在解决方案资源管理器 对该项目右键->属性 -> 配置管理器, 选择Debug或Release, x86或x64 (一般情况已经被VS设置好了)
· 注意: VS默认配置Debug模式, 如果还要使用Release模式, 需要把活动解决方案配置改成Release, 按照下面的配置过程全部再来一次!
开发环境示例

3-2. 设置 附加库目录

点击 链接器 -> 常规 -> 附加库目录 输入以下路径之一(示例中使用了staticlib目录):
· lib动态库, staticlib静态库, 详见本页3-5的参考链接.

$(OPENCV_DIR)\lib;%(AdditionalLibraryDirectories);$(OPENCV_DIR)\staticlib;%(AdditionalLibraryDirectories);

库目录

3-3. 添加 附加依赖项 (最麻烦的操作没有之一)

点击 链接器 -> 输入 -> 附加依赖项 输入Debug/Release模式对应的模块文件名(见3-3-1, 3-3-2)
附加依赖项 示例图

3-3-1. lib/staticlib 同名模块

· 在相同编译模式下 lib 与 staticlib 下的opencv_模块同名, 但静态库的大小明显大于动态库.
· 命名格式: opencv_+模块名+版本号.lib
—–版本号: 2.4.13.x 对应 2413(d) (有后缀d 的用于Debug模式, 无d 的用于Rlease模式, 二者不可混用!)
—–模块的含义可参考: OpenCV所有模块介绍.
Debug 模式

opencv_calib3d2413d.libopencv_contrib2413d.libopencv_core2413d.libopencv_features2d2413d.libopencv_flann2413d.libopencv_gpu2413d.libopencv_highgui2413d.libopencv_imgproc2413d.libopencv_legacy2413d.libopencv_ml2413d.libopencv_nonfree2413d.libopencv_objdetect2413d.libopencv_ocl2413d.libopencv_photo2413d.libopencv_stitching2413d.libopencv_superres2413d.libopencv_ts2413d.libopencv_video2413d.libopencv_videostab2413d.lib

Release模式

opencv_calib3d2413.libopencv_contrib2413.libopencv_core2413.libopencv_features2d2413.libopencv_flann2413.libopencv_gpu2413.libopencv_highgui2413.libopencv_imgproc2413.libopencv_legacy2413.libopencv_ml2413.libopencv_nonfree2413.libopencv_objdetect2413.libopencv_ocl2413.libopencv_photo2413.libopencv_stitching2413.libopencv_superres2413.libopencv_ts2413.libopencv_video2413.libopencv_videostab2413.lib

3-3-2. staticlib 特有模块

· 如果使用staticlib, 则还有其他组件需要添加, 否则编译还会报错.
Debug 模式

IlmImfd.liblibjasperd.liblibjpegd.liblibpngd.liblibtiffd.libzlibd.lib

Release模式

IlmImf.liblibjasper.liblibjpeg.liblibpng.liblibtiff.libzlib.lib

3-4. 设置 附加包含目录

点击 C/C++ -> 常规 -> 附加包含目录, 输入:

$(OPENCV_DIR)\..\..\include;%(AdditionalIncludeDirectories);

包含目录

3-5. 设置 运行库

点击 C/C++ -> 代码生成 -> 运行库, 选择4种运行库之一
运行库 示例
· 有d的用于Debug, 无d的用于Release.
· 使用lib库的用MD, 使用staticlib库的用MT具体
参考链接:
1. VC 运行时库 /MD、/MDd 和 /MT、/MTd的区别
2. 静态编译与动态编译的区别

4. 测试代码

配置完毕! 复制以下代码, 猜猜会显示什么

#include <opencv2/opencv.hpp>#include <string>using namespace cv;#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) //隐藏控制台int main(){    //窗口    const char draw_wind[] = "Draw Window";     //窗口名    namedWindow(draw_wind, WINDOW_AUTOSIZE);    //创建了一个窗口    Mat image(600, 800, CV_8UC3, Scalar(255, 255, 255));    //创建了高600x长800矩阵,初始化RGB颜色为白色    //圆    Point center(400, 300); //圆心(400,300)    int clr_R = 0, clr_G = 85, clr_B = 170; //RGB颜色    int r1 = 1, r2 = 101, r3 = 201;         //半径    int i1 = 1, i2 = 1, i3 = 1;             //你猜    //文字    const string text = "Congratulations! Press Esc to exit.";    const int fontFace = FONT_HERSHEY_COMPLEX;  //字体    const double fontScale = 0.8;               //尺寸因子,值越大文字越大     const int thickness = 2;                    //线条宽度     Size textSize = getTextSize(text, fontFace, fontScale, thickness,NULL);    const Point textOrigin = {              //文字的左下角        (image.cols - textSize.width) / 2,  //x坐标        (image.rows + textSize.height) / 2  //y坐标    };    //绘图    while (waitKey(10) != 27) { //每10毫秒刷新,循环至按下Esc        circle(image, center, r1, Scalar(clr_R, clr_G, clr_B), thickness);  //画一个圆到image中        circle(image, center, r2, Scalar(clr_B, clr_R, clr_G), thickness);        circle(image, center, r3, Scalar(clr_G, clr_B, clr_R), thickness);        putText(image, text, textOrigin, fontFace, fontScale,Scalar(255, 255, 255), thickness );        imshow(draw_wind, image);   //显示窗口并向窗口输出image内容        //        if (++r1 > 300) r1 = 1;        if (++r2 > 300) r2 = 1;        if (++r3 > 300) r3 = 1;        if (clr_R < 0 || clr_R > 0xFF) i1 = -i1;        if (clr_G < 0 || clr_G > 0xFF) i2 = -i2;        if (clr_B < 0 || clr_B > 0xFF) i3 = -i3;        clr_R += i1;        clr_G += i2;        clr_B += i3;    }    return 0;}

5. 附录

5-1. OpenCV官方指南(英文):

· 在Windows系统中配置环境变量
· 在Visual Studio中的配置

5-2. OpenCV其他参考文献:

· OpenCV编程头文件分析

5-3. VS2015(32+64位,withUpdate3)资源链接:

· 链接来自MSDN, 将代码拖到浏览器地址栏即可弹出下载窗口.
· 社区版:

ed2k://|file|cn_visual_studio_community_2015_with_update_3_x86_x64_dvd_8923246.iso|7633565696|605D19028916D09E1BFA2DABBD266FE9|/

· 专业版:

ed2k://|file|cn_visual_studio_professional_2015_with_update_3_x86_x64_dvd_8923256.iso|7745202176|DD35D3D169D553224BE5FB44E074ED5E|/

5-4. 常见报错:

·无法打开文件” : 模块文件名错误
·无法解析的外部符号” : 模块文件缺失/模块内无相关声明


第一篇博文, 参考了很多前辈的文章, 感谢他们的帮助.
欢迎大家在评论区指出漏洞, 以后还会继续补充更新.