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个文件夹(build和sources),简单配置只会用到build, 而自定义库还会用到sources.
如果打开build,你会看到以下目录
· 对于C/C++,我们只会用到include, x86和x64.
其中x64与x86里都装着vc14(vc14是什么意思?)运行OpenCV必需的二进制文件(\bin目录下)与 库文件(\lib和\staticlib目录下).
2.设置系统 环境变量
2-1. 新建 OpenCV_DIR
打开 此电脑->属性->更改设置->高级->环境变量, 在系统变量列表中 新建 (示例用的是32位系统所以用x86下目录, 而D:\应修改为你的安装路径 )
· 注意: 32位系统用\x86\vc14, 64位系统用\x64\vc14, 不要混用.
· 事实上新建OpenCV_DIR还可以用CMD或PowerShell输入以下命令之一来实现:
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. 常见报错:
· “无法打开文件” : 模块文件名错误
· “无法解析的外部符号” : 模块文件缺失/模块内无相关声明
第一篇博文, 参考了很多前辈的文章, 感谢他们的帮助.
欢迎大家在评论区指出漏洞, 以后还会继续补充更新.
- Windows VS2015配置OpenCV2.4.13 新手指南(C/C++)
- vs2015+opencv2.4.13配置
- VS2015配置OpenCv2.4.13
- Opencv2.4.13 vs2015 配置
- Windows OpenCV2.4.13 VS2015 编译
- opencv2.4.13配置VS2015(永久配置)
- VS2015+opencv2.4.13无本地依赖配置
- VS2015编译OpenCV2.4.13源码及配置
- VS2015和opencv2.4.13的配置
- VS2015配置C/C++-MySQL开发环境
- opencv2.4.13+win10+vs2015
- vs2015配置opencv2.4.9问题解决
- VS2015上配置opencv2.4.11
- VS2015 + opencv2.4.9配置过程
- openCV2.4.13+VS2015+Cmake开发环境配置,解决nonfree问题
- opencv2.4.13+vs2015+win10 64位环境配置
- opencv2.4.13+vs2015的链接库配置lib文件
- 给新手的 C 语言字符串指南
- Oracle基于数据泵导入dmp文件的小记
- 树状数组详解
- 数据结构的简单理解(3)
- docker registry私有仓库的一些错误解决办法
- squid之refresh_pattern详解
- Windows VS2015配置OpenCV2.4.13 新手指南(C/C++)
- 【HDU 6112 今夕何夕】
- ASCII & Binary
- 学ue4感受
- 并查集
- HTML 引入 CSS 的几种方式
- 递归入门:判断回文字符串
- 当 Thrift 遇到 JDK Epoll Bug
- MySQL