安装所需要的软件
1.安装VC++2008Express
可以从微软网站下载安装(http://www.microsoft.com/express/product/default.aspx)。
2.安装OpenCV
从http://www.opencv.org.cn/index.php/Download下载OpenCV2.1.0并安装,本文档假定安装目录为:C:studyOpenCV2.1
3.安装CMake
从http://www.cmake.org/cmake/resources/software.html下载Windows(Win32Installer)安装。最新版本为2.8.4
编译OpenCV
1.用CMake导出VC++项目文件
运行cmake-gui,设置路径为OpenCV安装路径(本文档假定安装位置为:C:studyOpenCV2.1),并创建子目录C:studyOpenCV2.1vs2008,用于存放编译结果。
①首先创建子目录C:studyOpenCV2.1vs2008,用于存放编译结果。然后运行Cmake-gui,选择好where..路径和whereto…路径[C:studyOpenCV2.1vs2008]
②点configure,选择VisualStudio9,点finish,等待内容变红色;
③再次点击configure,红色界面消失,正常显示;
④点击generate,生成工程文件。
2.编译OpenCV Debug和Release版本库
完成上一步骤后,将在C:studyOpenCV2.1vs2008目录下生成OpenCV.sln,用VC++2008Express打开OpenCV.sln,然后执行如下操作:
在Debug下,选择SolutionExplorer(解决方案资源管理器)里的SolutionOpenCV,点右键,运行”RebuildSolution(重新生成解决方案)”;如编译无错误,再选择INSTALL项目,右键运行”Build(生成)”。
在Release下,选择SolutionExplorer(解决方案资源管理器)里的SolutionOpenCV,点右键,运行”RebuildSolution(重新生成解决方案)”;如编译无错误,再选择INSTALL项目,运行”Build(生成)”。
此时,OpenCV的*d.dll文件(fordebug)和*.dll文件(forrelease)将出现在C:studyOpenCV2.1vc2008bin目录中;OpenCV的*d.lib文件(fordebug)和*.lib文件(forrelease)将出现在C:studyOpenCV2.1vc2008lib目录;头文件*.h出现在C:studyOpenCV2.1vc2008includeopencv中。
至此,可以被VC++2008Express调用的OpenCV动态库生成完毕。
配置Windows环境变量Path
将 C:studyOpenCV2.1vc2008bin 加入Windows系统环境变量Path中。加入后需要注销当前Windows用户(或重启)后重新登陆才生效。
为VC++2008Express配置OpenCV环境
打开VC++2008Express,菜单Tools(工具)->Options(选项)->ProjectsandSolutions(项目和解决方案)->VC++Directories(VC++目录)
在Show directories for(显示以下内容的目录)选择executable files(可执行文件),加入目录C:studyOpenCV2.1vc2008bin[注:在www.opencv.org.cn 网站的教程中缺少这一句,实践证明,加入这一句可以消除在调试中链接的时候出现的“无法打开文件highgui201d.lib”等类似错误。而且从原理上也应该加上。]
在Showdirectoriesfor(显示以下内容的目录)选择includefiles(包含文件),加入目录C:studyOpenCV2.1vc2008includeopencv
在Showdirectoriesfor(显示以下内容的目录)选择libraryfiles(库文件),加入目录C:studyOpenCV2.1vc2008lib
关闭VC++2008Express,因为重新打开所做更改才会生效。
测试:使用OpenCV2.1编程
1.打开VC++2008Express,创建一个Win32控制台程序opencvhello
(具体方法为:新建->项目->在项目类型中选择“win32”->在右边选择“Win32控制台应用程序”->输入路径和名字->确定-完成)
选择SolutionExplorer(解决方案资源管理器)里的opencvhello项目,点击鼠标右键,选择Properties(属性),在Linker(连接器)的Input(输入)中作如下操作:
为项目的Debug配置增加依赖的库:cxcore210d.libcv201d.libhighgui210d.lib(注意,文件名cv210d.lib可能是cv***d.lib等形式,具体应查看C:studyOpenCV2.1vc2008lib);[注:OpenCV2.1包含有cv210d.lib、cvaux210d.lib、cxcore210d.lib、cxts210d.lib、highgui210d.lib、ml210d.lib、opencv_ffmpeg210d.lib这些文件。请根据需要加入。]
为项目的Release配置增加依赖的库:cxcore210.libcv210.libhighgui210.lib [注:这些lib文件之间用空格隔开,在vs2010中需要加入英文分号“;”] [另注:OpenCV2.1包含有cv210.lib、cvaux210.lib、cxcore210.lib、cxts210.lib、highgui210.lib、ml210.lib、opencv_ffmpeg210.lib这些文件。请根据需要加入。]
把“配置属性”-“常规”-“字符集”修改为使用“多字节字符集”(由于2008默认是以Unicode字符集编译的)
2.编译运行下面的例程(需要将lena.jpg文件放在项目目录下)
/***********************************************************************
*OpenCV2.0测试例程
*于仕琪提供
***********************************************************************/
#include”stdafx.h”
#include”highgui.h”
//所有的以新风格命名的函数都在cv命名空间中
//如果希望不要每次都输入cv::,则可使用下面语句
//usingnamespacecv;
int_tmain(intargc,_TCHAR*argv[])
{
constchar*imagename=”lena.jpg”;//注意:虽然yushiqi说在win7下需要绝对路径,
//可是我在win xp下也得输入绝对路径才行。
//不知道为什么。但是在debug目录中直 接运行就可以显示。
//注意绝对路径中“”要用“”来表示,注意转义符。
cv::Matimg=cv::imread(imagename);//Matlab风格的cvLoadImage函数的另一种调用
if(img.empty())
{
fprintf(stderr,”Cannotloadimage%sn”,imagename);
return-1;
}
if(!img.data)//检查是否正确载入图像
return-1;
cv::namedWindow(“image”,CV_WINDOW_AUTOSIZE);//创建窗口
cv::imshow(“image”,img);//显示图像
cv::waitKey();
return0;
}
程序运行结果:
一些错误分析:
1.LINK : fatal error LNK1104错误
在Show directories for(显示以下内容的目录)选择executable files(可执行文件),加入目录C:studyOpenCV2.1vc2008bin
2.无法打开文件highgui201d.lib”等错误
在Show directories for(显示以下内容的目录)选择executable files(可执行文件),加入目录C:studyOpenCV2.1vc2008bin
其他错误待续……