我正在尝试将Opencv 2.3与Visual Studio 2010 Express一起使用。我的代码来自示例:

#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\binbuild\{x86|x64}\{vc9\vc10\mingw}\bin添加为库目录。
在我的编译器设置中将build\{x86|x64}\{vc9\vc10\mingw}\libbuild\{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个目录:buildopencv。 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\opencvinclude\opencv2。因此,转到“配置属性”>“链接器”>“输入”并添加它们:



编写更复杂的应用程序时,您可能需要添加其他我没有的OpenCV库br />提到了我们的这个小项目。

按F7键构建解决方案,您应该看到:执行应用程序,您需要修改系统的PATH环境变量以添加OpenCV DLL的位置。将此添加到PATH的末尾:

========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========


评论


@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

#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")