#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;
}
到目前为止,我做了什么?系统路径(以使用DLL)。
在我的链接器设置中将
build\bin
或build\{x86|x64}\{vc9\vc10\mingw}\bin
添加为库目录。在我的编译器设置中将
build\{x86|x64}\{vc9\vc10\mingw}\lib
和build\{x86|x64}\{vc9\vc10\mingw}\staticlib
添加为包含目录。结果是:1> LINK:致命错误LNK1104:无法打开文件'c:\ OpenCV2.3 \ build \ x86 \ vc10 \ lib.obj'
OpenCV文件夹中没有
build\include
。我仅解压了build\include\opencv
,而未使用CMake软件。我在做什么错?
#1 楼
好吧,官方指南是关于在VS2010上安装OpenCV 2.1的,所以我在下面写了一些说明,显示了如何在Visual Studio 2010(Express)上正确安装和配置OpenCV 2.3的x86版本,因为很多人似乎都有问题正确设置它。下载OpenCV-2.3.0-win-superpack.exe并执行以将所有文件提取到名为
OpenCV2.3
的文件夹中。在此文件夹中,有2个目录:build
和opencv
。 VS2010上的所有设置都将参考build
目录。出于实际目的,我将文件夹OpenCV2.3
移到了C:\
驱动器上,因此请注意本指南中建议的路径,因为您的路径可能有所不同。在Visual Studio上,创建一个新的Win32 Console Application项目并随心所欲命名。之后,将出现一个新窗口。单击“应用程序设置”选项卡,并确保选中“清空项目”选项:
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
int main(int argc, char* argv[])
{
if (argc < 2)
{
printf("Usage: ./opencv_hello <file.png>\n");
return -1;
}
IplImage* img = cvLoadImage(argv[1], CV_LOAD_IMAGE_UNCHANGED);
if (!img)
{
return -1;
}
cvNamedWindow("display", CV_WINDOW_AUTOSIZE);
cvShowImage("display", img );
cvWaitKey(0);
return 0;
}
此时,我们需要配置项目,以便它可以找到OpenCV标头和库。转到“项目属性”(ALT + F7),然后在出现新窗口时执行以下操作:
在“配置”框中,选择“所有配置”
打开“配置属性”>“ C / C ++”>“常规”,然后编辑“其他包含目录”字段以添加以下3条路径(用于标题):
main.cpp
请注意,
Source Files
用于OpenCV的C接口,main.cpp
用于C ++接口。我们还添加了文件夹C:\OpenCV2.3\build\include\opencv
,以防止我们的构建被C接口的某些标头破坏,这些标头将C ++标头称为C:\OpenCV2.3\build\include\opencv2
。然后,在“配置属性”>“链接器”>“常规”上添加库的路径,并在“其他库目录”字段上添加以下内容:C:\OpenCV2.3\build\include
:最后,对于此简单测试,我们将添加库
include\opencv
和include\opencv2
。因此,转到“配置属性”>“链接器”>“输入”并添加它们:编写更复杂的应用程序时,您可能需要添加其他我没有的OpenCV库br />提到了我们的这个小项目。
按F7键构建解决方案,您应该看到:执行应用程序,您需要修改系统的PATH环境变量以添加OpenCV DLL的位置。将此添加到PATH的末尾:
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
#2 楼
如果您在编辑PATH环境变量时遇到麻烦,还可以将所需的.dll文件复制到项目文件夹中:dll文件位于此文件夹中。 bin
,然后将它们复制到创建.exe文件的文件夹中:
c:\ Users \ PIMMES \ Documents \ Visual Studio 2010 \ Projects \ eigenfaces \ Debug(当然,您必须进行更改调试文件夹的路径)
您只需要复制项目中正在使用的.dll文件(例如,#include),例如,如果您收到一条错误消息,指出opencv_core231d.dll是找不到,然后从上面的位置(bin文件夹)获取此.dll文件,并将其复制到项目的Debug文件夹中。
评论
感谢您提出这种替代方法。它完美地工作了。即使它无法正确检测到dll,我也正确地编辑了环境路径变量。你能建议我任何可能的原因吗?
–私密
13年7月17日在21:04
#3 楼
每当我制作使用opencv 2.2或更高版本的程序时,我都会包含所有内容,然后注释掉不需要的库。试试这个,我确定您需要的不仅仅是highgui.h#include "opencv2\opencv.hpp"
using namespace cv;
//#pragma comment(lib, "opencv/opencv_calib3d231.lib")
//#pragma comment(lib, "opencv/opencv_contrib231.lib")
#pragma comment(lib, "opencv/opencv_core231.lib")
//#pragma comment(lib, "opencv/opencv_features2d231.lib")
//#pragma comment(lib, "opencv/opencv_flann231.lib")
//#pragma comment(lib, "opencv/opencv_gpu231.lib")
//#pragma comment(lib, "opencv/opencv_haartraining_engine.lib")
#pragma comment(lib, "opencv/opencv_highgui231.lib")
//#pragma comment(lib, "opencv/opencv_imgproc231.lib")
//#pragma comment(lib, "opencv/opencv_legacy231.lib")
//#pragma comment(lib, "opencv/opencv_ml231.lib")
#pragma comment(lib, "opencv/opencv_objdetect231.lib")
//#pragma comment(lib, "opencv/opencv_ts231.lib")
//#pragma comment(lib, "opencv/opencv_video231.lib")
评论
@Elfoc大大改善了答案,逐步展示了如何配置OpenCV 2.3和VS2010。
–karlphillip
11年8月12日在2:45
我已经将e:\ opencv \ build \ x86 \ vc9 \ bin添加到系统PATH环境变量中。我遇到运行时错误:找不到opencv_core231d.dll...。我正在使用Visual Studio 2008,奔腾4 m / c。知道有什么问题吗?
– Kaushik Acharya
2012年1月28日19:35
编辑PATH变量后是否重新启动系统?需要重新启动,以便VS看到更改。
– Mohsen Afshin
2012年3月22日在8:18
@karlphillip:您好,2.4.1已发布。您可以为此更新答案吗?还是程序相同。我按照这篇文章尝试了:stackoverflow.com/q/10901905/1134940,但是没有用。显示“计算机中缺少opencv_core240d.dll”。
– Abid Rahman K
2012年6月6日上午8:07
@karlphillip:太好了,我的朋友。终于对我有用。已经对该答案+1了。因此为您的其他链接+1。
– Abid Rahman K
2012年6月29日15:13