因为实验室的项目,想用OpenCV实现,刚好电脑上已经装了VS2010,就想把OpenCV整到VS中用,前后仅是配置环境就花了我老么长时间,总结下吧…本人系统是XP SP3,至于Windows 7, Vista等系统可以其他帖子.
本文参考了网上很多帖子,几个帮助比较大的链接如下:
http://neocv.blogbus.com/logs/65020560.html
http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=10070&start=0
步骤:
- 1下载安装VS2010、OpenCV、 Cmake2.82 、INTEL TBB3.0
- 2 用CMake建立VS工程:
① 运行Cmake gui,选择好where..路径和where to…路径 [自己建立VS2010目录 D:\Program Files\OpenCV-2.1\vs2010]
② 点configure,选择Visual Studio 10,点finish,待变红色后;
勾选BUILD_SHARED_LIBS,BUILD_TESTS,OPENCV_BUILD_3DPARTY_LIBS,以及下面的WITH_JASPER,WITH_JPEG,WITH_PNG,WITH_TBB(一般这个没默认选上),和WITH_TIFF选项 ,去掉BUILD_NEW_PYTHON_SUPPORT(默认选上);
③ 再次点击configure,TBB_INCLUDE_DIR-NOTFOUND字样的红色选项,此处为CMAKE找不到INTEL TBB的包含文件为之所致,将INTEL TBB 3.0里面的INCLUDE文件夹路径(注意是INCLUDE,不是INCLUDE里面的子文件夹)定位到该配置属性的路径里,
④ 再次点击Configure,在TBB_LIB_DIR处又会出现红色一行,此处为INTEL TBB的库文件位置,此处必须将路径定位到含有LIB文件的位置,比如我的安装位置是D:/Program Files/tbb30_20100406oss/lib/ia32/vc10,由于是配置VS2010,所以我们选择VC10文件夹,ia32子文件夹是32位系统,此处应根据对应操作系统选择。
⑤ 点击generate,生成工程文件
- 3 编译OpenCV:
① 用VS2010打开OpenCV.sln[上述目录VS2010中生成的]
② 右击解决方案资源管理器中的属性管理器,依次展开ALL_BUILD—Debug|Win32 — 右键单击Microsoft.Cpp.Win32.user,选择Properties(属性),然后选择VC++ Directories(VC++目录),在Executable Directories(可执行文件目录)里面将INTEL TBB 3.0的可执行路径(bin)填写到里面,须定位到VC10才可以,如我的是D:/Program Files/tbb30_20100406oss/lib/ia32/vc10,将Include Directories(包含目录)定位到Intel TBB的Include文件夹即可,无需再往深入定位,在Library Directories(库目录)里填写Intel TBB的LIB文件位置,定位到VC10文件夹
③ 在Debug下,选择Solution Explorer里的 Solution OpenCV,点右键,运行"Rebuild Solution";如编译无错误,再选择INSTALL项目,运行"Build"。
④ 在Release下,选择Solution Explorer里的 Solution OpenCV,点右键,运行"Rebuild Solution";如编译无错误,再选择INSTALL项目,运行"Build"。
- 4 配置环境变量:
① 配置Windows的环境变量:把bin的路径加入Path 例如我的分别为: D:\Program Files\tbb30_20100406oss\bin\ia32\vc10;D:\Program Files\OpenCV-2.1\vs2010\bin 配置之后需重启
② 为VS2010配置OpenCV环境:同步骤3的②,依次展开后,在VC++ Directories(VC++目录)中增加D:\Program Files\OpenCV2.1\vs2010下的可执行文件(bin)、包含文件(include\opencv)、以及库文件(lib)、源文件(src\cv、src\cvaux、src\cxcore、src\highgui、src\ml)
- 5 编程配置:新建项目opencvhello,为项目配置增加依赖的库,具体如下
选择Solution Explorer里的opencvhello项目,点击鼠标右键,选择Properties,在[链接器 LINKER]的[输入INPUT]中;
为项目的Debug配置增加依赖的库: cv210d.lib;cvaux210d.lib;cxcore210d.lib;highgui210d.lib;ml210d.lib;
为项目的Release配置增加依赖的库:cv210.lib;cvaux210.lib;cxcore210.lib;highgui210.lib;ml210.lib;
注意:添加依赖库的时候最好添加个文件,换行再添加下一个
--------------------------------------------------------------------------------
例程来自http://www.opencv.org.cn/index.php/VC_2008_Express%E4%B8%8B%E5%AE%89%E8%A3%85OpenCV2.0
/***********************************************************************
*
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;
}
--------------------------------------------------------------------------------
以上是稍微修改其他作者的原文,下面列举我碰到过的问题:
- [LDR: LdrpWalkImportDescriptor() failed to probe D:\Program Files\OpenCV2.1\bin\cxcore210d.dll for its manifest, ntstatus 0xc015000] 这种问题折磨我好半天,其实仔细点你就会发现,文件路径并不是我们生成vs2010下的dll文件,检查发现是我在步骤3中将路径添加错了,发现网上问这问题的人还不少,呵呵…
- [cv::imread不能载入图片,而当用fopen打开文件时,可以打开] cv::imread是matlab风格的函数调用,以前好像并没有,换下cvLoadImage()方法试试,代码得重写…
- [程序编译没有出错,而运行却一直是不能载入图片…] 换做cvLoadImage还是不行,唉,最后我将载入的文件以全路径传给程序,行了,无语…
- [无法找到*.dll,我没碰到这种问题,其他人碰到过,此时检查环境变量是否添加正确,如无添加后重启电脑试试…]
--------------------------------------------------------------------------------
附上本人的程序…
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
int _tmain(int argc, char* argv[])
{
const char* imagename = "D:\\Backup\\visual studio 2010\\Projects\\OpenCVTest3\\Debug\\lena.jpg";
IplImage* img;
if( (img = cvLoadImage( imagename, CV_LOAD_IMAGE_GRAYSCALE ) ) != 0 )
{
printf("Load Successfully\n");
}
else
{
printf("Load Unsuccessfully\n");
return -1;
}
cvNamedWindow( "Lena", 1 );
cvShowImage( "Lena", img );
cvWaitKey(0);
cvReleaseImage( &img );
cvDestroyAllWindows();
return EXIT_SUCCESS;
}