您的位置:首页 > 运维架构

VS2010中关于OpenCV 2.3.1开发环境配置及第一个OpenCV程序

2013-02-02 18:27 591 查看
1.在OpenCV中文网站(http://www.opencv.org.cn/index.php)上面下载OpenCV-2.3.1-win的安装包。可以下载源码编译版,也可以下载安装包,还有OpenCV的参考手册。我这里下载了安装包(即
OpenCV-2.3.1-win-superpack.exe 文件)。
 
2.下载完点击安装,设置安装路径(这里的安装,更确切的说应该是解压),解压到C盘Program文件夹下面(个人习惯)。
 
3.简单说明一下OpenCV目录下各个文件是作用:
3rdparty 包含第三方库的实现代码,如zlib,ffmpeg,libjpeg等
android android开发相关文件
build 用于编译程序的lib文件和运行exe的dll文件
data 数据文件,如机器学习输出的xml文件
doc 帮助文档 include 头文件
modules opencv中各模块的源文件
samples 示例代码
 

4.告诉程序如何加载dll文件
以下三种方法任意一种都是可以的,根据情况任选其一:
1)配置环境变量:
右击“我的电脑”-“属性”-“高级系统设置”-“环境变量”,在系统环境变量中点击“新建”,输入“OpenCV_Path”和“C:\Program Files\opencv\build\x86\vc10\bin”,然后再PATH中增加“;%OpenCV_Path%”;
配置完后记得要重启电脑或者注销登录,配置才生效!

b) 拷贝到系统目录:
将对应dll拷贝到c:\windows\system32目录下;
c)拷贝到程序运行目录:
将dll拷贝到debug或release等exe输出目录下。
 

5.配置VS2010中的参数:
新建一个Win32控制台空项目。

以前配置VC++6.0、VS2005、VS2008都是在“工具”->“选项”->“项目与解决方案”->“VC++ 目录”中一次性配置好就可以了。但是到了VS2010后,当你按照前面的这个步骤操作时,会发现有提示“VC++目录编辑功能已被否决”。上网搜了许久,发现以下方法较好,一次性配置即可。
选择“视图”-“属性管理器”,双击Debug | Win32下的“Microsoft.Cpp.Win32.user”,如下图所示。



经过测试,VC2010是可以在SolutionExporer上面的右键项目选择属性修改一下配置的。

在弹出的配置框中配置,选择“VC++目录”(VC++Directories)。

1)、在“包含目录”(IncludeDirectories)中的结尾处(若结尾处无英文状态下的“;”则需自行添加“;”,下同)加入以下内容添加以下内容:
C:\Program Files\OpenCV\opencv\build\include\opencv;C:\Program Files\OpenCV\opencv\build\include\opencv2;C:\Program Files\OpenCV\opencv\build\include;
2)、在库目录和可执行文件目录(LibraryDirectories)中的结尾处加入以下内容添加:
C:\Program Files\OpenCV\opencv\build\x86\vc10\lib;

如下图所示。



3)、在“链接器”-“输入”-“附加依赖选项”("Linker"->"Input"->"AdditionalDependencies")中的结尾处加入.lib运行库文件。
注:lib可根据实际情况进行删减。

针对debug配置添加以下库:(注意,我这里使用的是OpenCV-2.3.1-win的安装包,故opencv版本后缀有“3d231”,如果版本不同,应注意修改)
opencv_calib3d231d.lib
opencv_contrib231d.lib
opencv_core231d.lib
opencv_features2d231d.lib
opencv_flann231d.lib
opencv_gpu231d.lib
opencv_highgui231d.lib
opencv_imgproc231d.lib
opencv_legacy231d.lib
opencv_ml231d.lib
opencv_objdetect231d.lib
opencv_ts231d.lib
opencv_video231d.lib
如果是release配置(以后再说,只需要添加上面的debug配置就行了现在),则添加:
opencv_calib3d231.lib
opencv_contrib231.lib
opencv_core231.lib
opencv_features2d231.lib
opencv_flann231.lib
opencv_gpu231.lib
opencv_highgui231.lib
opencv_imgproc231.lib
opencv_legacy231.lib
opencv_ml231.lib
opencv_objdetect231.lib
opencv_ts231.lib
opencv_video231.lib



6.测试文件:
 
//把一张名为“pp.jpg”的照片放在工程目录下,编译运行后出现照片。

[cpp]
view plaincopyprint?

#include <opencv2\opencv.hpp>
  
#include <iostream>   
#include <string>
  
using namespace cv;  
using namespace std;  
int main()  
{  
Mat img = imread("pp.jpg");  
if(img.empty())  
{  
cout<<"error";  
return -1;  
}  
imshow("xx的靓照",img);  
waitKey();  
return 0;  
}  

#include <opencv2\opencv.hpp>
#include <iostream>
#include <string>
using namespace cv;
using namespace std;
int main()
{
Mat img = imread("pp.jpg");
if(img.empty())
{
cout<<"error";
return -1;
}
imshow("xx的靓照",img);
waitKey();
return 0;
}


//调用摄像头,如果成功运行,将显示出摄像头的视频。若不成功,尝试将以下语句中的“1”,改成-1,0或2 CvCapture* capture = cvCaptureFromCAM(1);

[cpp]
view plaincopyprint?

#include "stdafx.h"   
#include <highgui.h>   
int _tmain(int argc, _TCHAR* argv[])  
{  
int c;  
// allocate memory for an image   
IplImage *img;  
// capture from video device #1   
CvCapture* capture = cvCaptureFromCAM(1);  
// create a window to display the images
  
cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);  
// position the window   
cvMoveWindow("mainWin", 5, 5);  
while(1)  
{  
// retrieve the captured frame   
img=cvQueryFrame(capture);  
// show the image in the window   
cvShowImage("mainWin", img );  
// wait 10 ms for a key to be pressed
  
c=cvWaitKey(10);  
// escape key terminates program   
if(c == 27)  
break;  
}  
return 0;  
}  

#include "stdafx.h"
#include <highgui.h>
int _tmain(int argc, _TCHAR* argv[])
{
int c;
// allocate memory for an image
IplImage *img;
// capture from video device #1
CvCapture* capture = cvCaptureFromCAM(1);
// create a window to display the images
cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);
// position the window
cvMoveWindow("mainWin", 5, 5);
while(1)
{
// retrieve the captured frame
img=cvQueryFrame(capture);
// show the image in the window
cvShowImage("mainWin", img );
// wait 10 ms for a key to be pressed
c=cvWaitKey(10);
// escape key terminates program
if(c == 27)
break;
}
return 0;
}


7.opencv配置好后运行出现错误:"计算机中丢失opencv_core231d.dll" 等dll文件的解决方案 :
(1)、注销或重启计算机,使得系统环境变量中的path生效;
(2)、通过path中设置的路径去寻找对应的dll文件,查看是否存在,是否被成功引用到VS中;
(3)、通过文件搜索功能,找到运行时提示的那个dll文件所在路径,并查看path的设置是否符合;
(4)、拷贝这个dll文件到VS工程目录下的debug和release目录中;
(5)、对比一下配置中的dll文件名是否和目录中的文件名对应,这里通常会出现因不同版本导致的不同文件名而配置时,却通过复制粘贴网上攻略导致一些错误的产生。例如:opencv 2.3.0版本的dll文件名应该是opencv_core230d.dll,而opencv2.3.1版本的dll文件名是opencv_core231d.dll,以此类推。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐