本文篇幅长, 链接较多, 建议结合目录查看.
该配置只使用OpenCV现成库, 适合新手操作.
实际上还有编译自定义库的配置方法, 在 官方指南(英文): 从源文件创建自定义库 中有详细指导, 过程较复杂, 笔者能力有限, 不在本文展开.
以下操作均参考自官网: Introduction to 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目录下).
打开 此电脑->属性->更改设置->高级->环境变量, 在系统变量列表中 新建 (示例用的是32位系统所以用x86下目录, 而D:\应修改为你的安装路径 )
· 注意: 32位系统用\x86\vc14, 64位系统用\x64\vc14, 不要混用.
· 事实上新建OpenCV_DIR还可以用CMD或PowerShell输入以下命令之一来实现:
setx -m OPENCV_DIR D:\OpenCV\Build\x86\vc14
setx -m OPENCV_DIR D:\OpenCV\Build\x64\vc14
· 但是下面Path的编辑不要用命令行(除非你记得Path原先的内容)! 因为setx会彻底重写Path!
详见: 用setx设置永久环境变量及注意事项
打开 此电脑->属性->更改设置->高级->环境变量, 在系统变量列表中找到变量Path,打开它进行编辑
· 如果是文本式编辑, 要在变量值末尾添加 %OPENCV_DIR%\bin; (注意有分号结尾, 如果原先的末尾没有分号还要补个分号再加新变量值)
· 如果是图表式,直接在空白处双击添加%OPENCV_DIR%\bin (注意没有分号)
打开/新建一个C/C++项目, 在解决方案资源管理器 对该项目右键->属性 -> 配置管理器, 选择Debug或Release, x86或x64 (一般情况已经被VS设置好了)
· 注意: VS默认配置Debug模式, 如果还要使用Release模式, 需要把活动解决方案配置改成Release, 按照下面的配置过程全部再来一次!
点击 链接器 -> 常规 -> 附加库目录 输入以下路径之一(示例中使用了staticlib目录):
· lib是动态库, staticlib是静态库, 详见本页3-5的参考链接.
$(OPENCV_DIR)\lib;%(AdditionalLibraryDirectories);
$(OPENCV_DIR)\staticlib;%(AdditionalLibraryDirectories);
点击 链接器 -> 输入 -> 附加依赖项 输入Debug/Release模式对应的模块文件名(见3-3-1, 3-3-2)
· 在相同编译模式下 lib 与 staticlib 下的opencv_模块同名, 但静态库的大小明显大于动态库.
· 命名格式: opencv_+模块名+版本号.lib
—–版本号: 2.4.13.x 对应 2413(d) (有后缀d 的用于Debug模式, 无d 的用于Rlease模式, 二者不可混用!)
—–模块的含义可参考: OpenCV所有模块介绍.
Debug 模式
opencv_calib3d2413d.lib
opencv_contrib2413d.lib
opencv_core2413d.lib
opencv_features2d2413d.lib
opencv_flann2413d.lib
opencv_gpu2413d.lib
opencv_highgui2413d.lib
opencv_imgproc2413d.lib
opencv_legacy2413d.lib
opencv_ml2413d.lib
opencv_nonfree2413d.lib
opencv_objdetect2413d.lib
opencv_ocl2413d.lib
opencv_photo2413d.lib
opencv_stitching2413d.lib
opencv_superres2413d.lib
opencv_ts2413d.lib
opencv_video2413d.lib
opencv_videostab2413d.lib
Release模式
opencv_calib3d2413.lib
opencv_contrib2413.lib
opencv_core2413.lib
opencv_features2d2413.lib
opencv_flann2413.lib
opencv_gpu2413.lib
opencv_highgui2413.lib
opencv_imgproc2413.lib
opencv_legacy2413.lib
opencv_ml2413.lib
opencv_nonfree2413.lib
opencv_objdetect2413.lib
opencv_ocl2413.lib
opencv_photo2413.lib
opencv_stitching2413.lib
opencv_superres2413.lib
opencv_ts2413.lib
opencv_video2413.lib
opencv_videostab2413.lib
· 如果使用staticlib, 则还有其他组件需要添加, 否则编译还会报错.
Debug 模式
IlmImfd.lib
libjasperd.lib
libjpegd.lib
libpngd.lib
libtiffd.lib
zlibd.lib
Release模式
IlmImf.lib
libjasper.lib
libjpeg.lib
libpng.lib
libtiff.lib
zlib.lib
点击 C/C++ -> 常规 -> 附加包含目录, 输入:
$(OPENCV_DIR)\..\..\include;%(AdditionalIncludeDirectories);
点击 C/C++ -> 代码生成 -> 运行库, 选择4种运行库之一
· 有d的用于Debug, 无d的用于Release.
· 使用lib库的用MD, 使用staticlib库的用MT具体
参考链接:
1. VC 运行时库 /MD、/MDd 和 /MT、/MTd的区别
2. 静态编译与动态编译的区别
配置完毕! 复制以下代码, 猜猜会显示什么
#include
#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;
}
· 在Windows系统中配置环境变量
· 在Visual Studio中的配置
· OpenCV编程头文件分析
· 链接来自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|/
· “无法打开文件” : 模块文件名错误
· “无法解析的外部符号” : 模块文件缺失/模块内无相关声明
第一篇博文, 参考了很多前辈的文章, 感谢他们的帮助.
欢迎大家在评论区指出漏洞, 以后还会继续补充更新.