为 Visual Studio 2010 设置 OpenCV-2.3

Posted

技术标签:

【中文标题】为 Visual Studio 2010 设置 OpenCV-2.3【英文标题】:Setup OpenCV-2.3 for Visual Studio 2010 【发布时间】:2011-10-24 02:02:02 【问题描述】:

我正在尝试将 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;

到目前为止我做了什么?

在我的系统路径中添加了build\binbuild\x86|x64\vc9\vc10\mingw\bin 之一(以使用DLL)。 将build\x86|x64\vc9\vc10\mingw\libbuild\x86|x64\vc9\vc10\mingw\staticlib 作为库目录添加到我的链接器设置中。 在我的编译器设置中添加了 build\includebuild\include\opencv 作为包含目录。

结果是:

1>LINK : 致命错误 LNK1104: 无法打开文件 'c:\OpenCV2.3\build\x86\vc10\lib.obj'

OpenCV 文件夹中没有lib.obj。我只解压了OpenCV-2.3.0-win-superpack.exe,没有使用CMake软件。

我做错了什么?

【问题讨论】:

【参考方案1】:

好吧,official guide 是用于在 VS2010 上安装 OpenCV 2.1,所以我在下面写了一些说明,说明如何正确安装和配置 x86 版本的 Visual Studio 2010 (Express) 上的strong>OpenCV 2.3,因为很多人似乎在正确设置它时遇到问题。

下载OpenCV-2.3.0-win-superpack.exe并执行它以将所有文件提取到名为OpenCV2.3的文件夹中。在此文件夹内有 2 个目录:buildopencv。 VS2010 上的所有设置都将引用build 目录。出于实际目的,我将文件夹 OpenCV2.3 移动到了我的 C:\ 驱动器,因此请注意我在本指南中建议的路径,因为您的路径可能会有所不同。

在 Visual Studio 上,创建一个新的 Win32 控制台应用程序 项目并将其命名为您喜欢的任何名称。之后,将显示一个新窗口。点击标签 Application Settings 并确保选项 Empty Project 被选中:

将新文件main.cpp 添加到文件夹Source Files,然后将此代码添加到main.cpp

#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),一旦出现新窗口,请执行以下操作:

配置框中,选择所有配置

打开 Configuration Properties > C/C++ > General,然后编辑字段 Additional Include Directories 以添加这 3 个路径(用于标题):

C:\OpenCV2.3\build\include\opencv

C:\OpenCV2.3\build\include\opencv2

C:\OpenCV2.3\build\include

请注意,include\opencv 用于 OpenCV 的 C 接口,include\opencv2 用于 C++ 接口。我们还添加了文件夹 include,以防止我们的构建被 C 接口的某些头文件破坏,这些头文件将 C++ 头文件称为opencv2\core

然后,在 Configuration Properties > Linker > General 中添加库的路径,并在 Additional Library Directories 字段中添加:C:\OpenCV2.3\build\x86\vc9\lib:李>

最后,对于这个简单的测试,我们将添加库opencv_core230.libopencv_highgui230.lib。所以去 Configuration Properties > Linker > Input 并添加它们:

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

F7构建解决方案,您应该会看到:

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

为了能够执行应用程序,您需要在系统的modify the PATH environment variable 上添加 OpenCV DLL 的位置。将此添加到 PATH 的末尾:

; C:\OpenCV2.3\build\x86\vc9\bin

【讨论】:

@Elfoc 大幅改进了答案,逐步展示如何配置 OpenCV 2.3 和 VS2010。 我已将 e:\opencv\build\x86\vc9\bin 添加到系统 PATH 环境变量中。我收到运行时错误:未找到 opencv_core231d.dll .... 我使用的是 Visual Studio 2008,Pentium 4 m/c。知道是什么错误吗? 您是否在编辑 PATH var. 后重新启动了系统?需要重新启动,以便 VS 看到更改。 @karlphillip:您好,2.4.1 已发布。你能更新你的答案吗?或者程序是否相同。我按照这篇文章尝试过:***.com/q/10901905/1134940,但没有奏效。显示“计算机中缺少 opencv_core240d.dll”。 @karlphillip:我的朋友很棒。最后它对我有用。已经 +1-ed 这个答案。所以 +1 为您的其他链接。【参考方案2】:

如果您在编辑 PATH 环境变量时遇到困难,您还可以将所需的 .dll 文件复制到您的项目文件夹中: dll文件位于此文件夹../OpenCV2.3/build.x86/vc9/bin

然后将它们复制到创建 .exe 文件的文件夹中: c:\Users\PIMMES\Documents\Visual Studio 2010\Projects\eigenfaces\Debug(当然你必须改变你的Debug文件夹的路径)

您只需要复制您在项目中使用的 .dll 文件(例如#include)例如,如果您收到一条错误消息说 opencv_core231d.dll 未找到,则从上述位置获取此 .dll 文件(bin 文件夹)并复制到您的项目 Debug 文件夹。

希望这会有所帮助..

【讨论】:

感谢您提出这种替代方法。它完美无缺。即使无法正确检测到 dll,我也正确编辑了环境路径变量。你能告诉我任何可能的原因吗?【参考方案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")

【讨论】:

以上是关于为 Visual Studio 2010 设置 OpenCV-2.3的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2010 认为它处于调试模式(但它设置为发布模式)

Visual Studio 2015 属性页无法打开 Visual Studio 2010 属性

在 Visual Studio 2010 中构建任何 ffmpeg 项目时出现错误链接 2001 libavformat.a(tls_schannel.o)

Visual Studio 2010 编辑器意外自动更正

visual studio 2010编译c的设置方法

Visual Studio 2010 和 gcc/g++ 4.6.3 之间 iostream 行为的意外差异