(虽然这个跟虚拟化没有关系,但是这是我去年6月份写的一个文档,也放到这里吧,作为备份) 今天花了半天时间在Mac OS X的Xcode下和Widnows的VS2010下成功的安装了OpenCV2.1。最杯具的是OpenCV官方提供了VS2008的安装包,却没有VS2010的,无奈,只好完全手动编译。先说一下Xcode下的吧,Xcode的核心使用的GNU的gcc,因此所有操作几乎都和在Linux一样。无论是Windows还是Mac OS X,都需要一个辅助工具就是CMake,可以通过搜索很容易的找到它的安装包。 首先从SourceForge下载OpenCV的源代码包,分别下载UNIX版本的和win32版本的。把UNIX版本的拷贝到Mac机器上,把win32版本的拷贝的PC机上(这个好像有点废话)。打开Mac的命令行,输入tar命令解压缩软件包,在桌面上新建一个目录随便起一个名字(这里就要OpenCV-build),打开CMake然后选择源目录为解压后的软件包位置,目标目录为OpenCV-build。单击“Configure”按钮,它会提示你选择生成什么样的工程,我比较喜欢Makefile,因此选择UNIX Makefile,当然也可以选择Xcode。然后等一会,会看到中间的框框一片红色,不用管它,再单击一次Configure,然后单击Generate。这样,Makefile文件就已经生成完毕了。 回到命令行,进入~\Desktop\OpenCV-Build目录输入make和sudo make install让OpenCV编译安装。一般情况下会很顺利的结束,之后进入目录“/usr/local”就会看到结果了,所有的链接库在lib目录中,头文件在include中,如果只放在这里Xcode会找不到他们,www.linuxidc.com 因此需要做一些链接。 Xcode默认的头文件位置在\Developer\SDKs\MacOSX10.6\usr\include,链接库在\Developer\SDKs\MacOSX10.6\usr\lib,因此通过ln命令将头文件和库连接到目标,这里举两个例子: ln -s \usr\local\include\opencv \Developer\SDKs\MacOSX10.6.sdk\usr\include ln -s \usr\local\lib\cv.lylib \Developer\SDKs\MacOSX10.6.sdk\usr\lib 至此Xcode已经可以找到OpenCV的头文件了。新建一个C++工程就可以使用OpenCV,虽然可以找到头文件,还需要手动的将OpenCV所需的库文件拖入工程,这个是需要注意的,www.linuxidc.com 否则链接的过程会通不过的。
下面说一下在VS2010中的安装,前半部分基本上都是一样的,使用CMake生成VS10的工程,然后单击XXX.sln文件打开VS2010,里面有很多工程,主要考虑两个,一个是BUILD ALL,另一个是INSTALL,由于在Windows下Debug和Release使用的库是有区别的,因此,需要用Debug和Release各编译一次,每次先Rebuild BUILD ALL工程,然后在Rebuild INSTALL工程。完成编译后,dll文件在bin目录中,lib文件在lib目录中,头文件在include目录中,下面的任务依旧是让VS2010能够找到OpenCV对应的文件。
由于VS2010将Tools>Options中的Directories的设置给取消,因此不能像VS2008中那样设置。新建一个空白工程,打开View>Property Manager,展开Debug,里面有Microsoft.Cpp.XXXXXX的,双击,找到Directories,修改在对应的目录中添加OpenCV对应的目录,比如Include中需要添加Path-to-OpenCV\include。这样VS2010就能够找到OpenCV对应的文件了。
最后还需要在工程中告诉工程需要哪些库文件。由于Debug和Release使用的库是不同的,因此需要分别设置,但是这是的方法是一样的。回到工程管理器,右键单击工程,然后选择“Properties”,选择“Debug”或“Release”,然后选择Linker>Input>Additional Dependencies中添加OpenCV对应的lib文件,其中XXXX210.lib是Release用的,XXXX210d.lib是Debug用的。
测试代码:
#include <opencv/highgui.h>
int main()
{
IplImage *img = cvLoadImage(“testimg.jpg”);
cvNamedWindow(“Example”, CV_WINDOW_AUTOSIZE);
cvShowImage(“Example”, img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow(“Example”);
return 0;
}