VS2010下配置OpenCV2.2运行环境
VS2010下配置OpenCV2.2运行环境
搞了一段时间的FPGA在视频图像采集上的应用,对视频图像处理产生了不少兴趣。本科时学过图像处理这门课,无奈学的都是理论T.T,于是决定抽时间学习一下OpenCV这个神奇的玩意儿,实践一下图像处理的应用,无论从感性还是理性上加深对图像处理的认识。
好吧,废话少说,先了解一下OpenCV。根据“有问题找度娘”的光荣传统,我们都可以从百度百科上了解到:
OpenCV的全称是:Open Source Computer Vision Library。
OpenCV于1999年由Intel建立,现在由Willow Garage提供支持。OpenCV是一个基于BSD许可证授权(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。最新版本是2.2。
应用领域:
1、人机互动
2、物体识别
3、图象分割
4、人脸识别
5、动作识别
6、运动跟踪
7、机器人
等等……
接下来是OpenCV的安装和配置,这个本来没有什么可说的,网上教程一大把,一步步照做下来就OK的,可是也会碰到版本不同和版本更新的情况,OpenCV早有了2.2版本,VS2010也出来很久了,本人的环境就是VS2010+OpenCV2.2但是在OpenCV中文官网上的还是VC 2008 Express下安装OpenCV2.0/2.1的教程( http://www.opencv.org.cn/index.php/VC_2008_Express%E4%B8%8B%E5%AE%89%E8%A3%85OpenCV2.0/2.1 ),这让老夫情何以堪~
需要注意的是,下载下来的OpenCV2.2文件是否已经把已知的bug修复了,参见OpenCV2.2无法打开摄像头的解决办法,如果没有,修正bug,再进行下面的步骤。
我们仍然可以参考官网的教程,一步步下来相当顺利。但到为VC++ 2008 Express配置OpenCV环境这一步(这一步是OpenCV运行环境的配置,能够使你的程序顺利地利用OpenCV的库文件),打开VS2010,菜单 Tools -> Options -> Projects and Solutions -> VC++ Directories ,会惊奇地发现VC++目录编辑功能已被否决,那末,该怎么办呢?
根据光荣传统,我们可以从百度上了解到,VS2010版本是不提供VC++目录的相关设置的,并且可以找到很好的解决方法。感谢网友microfenal。
《在Visual Studio 2010中配置VC++目录》(http://blog.sina.com.cn/s/blog_72824f680100ps4c.html)
解决方法(此方法在你想调试任意一个利用到OpenCV库文件的程序之前使用而且只需配置一次):
打开任意一个VC++项目,再通过切换VS2010左下角的标签选择属性管理器;
双击任意“Microsoft.Cpp.Win32.user”,在弹出的属性页中设置VC++目录。该设置方法对所有VC++项目都有效。按参考官网的方法,只需修改可执行文件目录executable files、包含目录include files、库目录library files到你用CMake导出VC++项目文件的相关目录,例如OpenCV2.2\VC2010\bin、OpenCV2.2\VC2010\include、OpenCV2.2\VC2010\lib。
这种方法简单直观,到此问题解决。
万事俱备,只欠东风。开始第一个OpenCV程序吧~
基本参考官网的方法,需要特别注意的是,由于OpenCV版本的更新,OpenCV2.2的库文件和2.0版本相比有很多不一样。在为项目的Debug、Release配置增加依赖的库时添加的是你这个版本的OpenCV库文件名,例如OpenCV2.0中的core200d.lib或者OpenCV2.2中的opencv_core220d.lib等。在OpenCV2.2版本下需要添加的常用库文件有:
opencv_core220d.lib;opencv_highgui220d.lib;opencv_video220d.lib;opencv_ml220d.lib;opencv_legacy220d.lib;opencv_imgproc220d.lib;
那么是不是每次打开一个项目就要进行添加呢?当然有更方便的方法。受到上面设置VC++目录方法的启发,打开“Microsoft.Cpp.Win32.user属性页”—>链接器—>输入,将上面常用库文件名复制进“附加依赖项”。这种方法会将Debug、Release的附加依赖项配置成相同的库文件名,而Release的附加依赖项库文件名是不带后缀d的。需要进行小小的修改(为Release的附加依赖项库文件名去掉后缀d)。
或者,老老实实地分别为项目的Debug、Release配置附加依赖项。
最后,编译运行测试例程。图像处理中相当经典的美女lena的头像就展现在眼前了(在win7下将lena.jpg与项目的VC++project放在一起,就不需要填写完整路径了)!
PS:话说,写博客还真是花时间啊,可能自己很久没写东西了吧~费了好大劲挤出这么篇,算是一个整理吧。
/***********************************************************************
* OpenCV 2.0 测试例程
* 于仕琪 提供
***********************************************************************/
#include "stdafx.h"
#include "highgui.h"
//所有的以新风格命名的函数都在 cv 命名空间中
//如果希望不要每次都输入 cv:: ,则可使用下面语句
//using namespace cv;
int _tmain(int argc, _TCHAR* argv[])
{
const char* imagename = "lena.jpg";
cv::Mat img = cv::imread(imagename); // Matlab风格的 cvLoadImage 函数的另一种调用
if(img.empty())
{
fprintf(stderr, "Can not load image %s\n", imagename);
return -1;
}
if( !img.data ) // 检查是否正确载入图像
return -1;
cv::namedWindow("image", CV_WINDOW_AUTOSIZE); //创建窗口
cv::imshow("image", img); //显示图像
cv::waitKey();
return 0;
}