【问题标题】:Linking OpenCV 2.4.2 with Visual Studio 2010将 OpenCV 2.4.2 与 Visual Studio 2010 链接
【发布时间】:2013-12-14 14:20:26
【问题描述】:

我已经按照此处所述安装了 OpenCV:Installing openCV 2.4 for C/C++ for Visual Studio

我尝试链接 openCV 库,但我被困在 this tutorial 中的“本地方法”。

我有两个地方存放 openCV 文件: [用户名]/opencv (official)/ 我提取openCV源码的地方(进一步称为源码目录) [用户名]/opencv-build/ 我使用 cmake 构建 openCV 然后用 Visual Studio 编译它(进一步称为构建目录)

我尝试遵循的教程说链接指向构建目录的 $(OPENCV_DIR)\include。但是,我的构建目录中的“include”文件夹仅包含一些 cmake 文件,而源目录中的“include”包含 openCV 头文件(在文件夹 opencv 和 opencv 中)。我知道我应该改用源目录,但我尝试了两者都没有工作。

接下来,教程说链接 $(OPENCV_DIR)\libs。我有一个文件夹“lib”,所以我猜这只是一个拼写错误。我的文件夹“lib”包含两个文件夹:“Debug”和“Release”。我应该将 [username]/opencv-build/lib/Debug 添加到 Debug 属性页,并将 [username]/opencv-build/lib/Release 添加到 Release 属性页吗?

我在两个属性页的链接器输入中添加了 242 个版本库。

无论我做什么,Visual Studio 都会突出显示所有的 include 语句,因此也会突出显示其他所有内容。

#include "stdafx.h"
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

任何想法我做错了什么?


在 go4sri 回答后编辑:

更改为 opencv\include\opencv 解决了包含问题(“stdafx.h”除外),但是我现在尝试了以下“hello world”:

 #include <cv.h>
 #include <highgui.h>

 int main ( int argc, char **argv )
 {
     cvNamedWindow( "My Window", 1 );
     IplImage *img = cvCreateImage( cvSize( 640, 480 ), IPL_DEPTH_8U, 1 );
     CvFont font;
     double hScale = 1.0;
     double vScale = 1.0;
     int lineWidth = 1;
     cvInitFont( &font, CV_FONT_HERSHEY_SIMPLEX | CV_FONT_ITALIC,
             hScale, vScale, 0, lineWidth );
     cvPutText( img, "Hello World!", cvPoint( 200, 400 ), &font,
             cvScalar( 255, 255, 0 ) );
     cvShowImage( "My Window", img );
     cvWaitKey();
     return 0;
}

虽然包含不再突出显示,但其他所有内容仍然是。错误是“标识符 XXX 未定义”。


编辑

我已将之前版本的 openCV 中的一些文件复制到&lt;source_directory&gt;\include\opencv2。现在 Visual Studio 不会突出显示任何内容,但是当我尝试构建它时,出现“未解析的外部符号”错误:_cvCreateImage、_cvInitFont、_cvNamedWindow、_cvPutText、_cvShowImage 和 _cvWaitKey。

【问题讨论】:

标签: visual-studio-2010 visual-studio opencv


【解决方案1】:

您使用源目录中的包含是正确的。

将包含更改为:

#include <opencv\cv.h>
#include <opencv\cxcore.h>
#include <opencv\highgui.h>

它们都包含在include下的opencv目录中。这是使用Opencv的标准方式。

但是,您也可以将包含选项更改为&lt;source_dir&gt;\include\opencv;&lt;source_dir&gt;\include\opencv2;&lt;source_dir&gt;\include [不推荐]

对于库:

是的。将附加库目录选项中的 Debug 目录用于 Debug(和 Release 用于发布) 您还需要更改输入库名称 - 请注意,所有调试库都以 d 结尾,而发布库则没有。 例如:

调试库将被命名为:opencv_imgproc242d.lib 发布库将命名为:opencv_imgproc242.lib

希望这会有所帮助...

【讨论】:

  • 谢谢!这解决了一些问题,但是我仍然无法构建项目。查看已编辑的问题。
  • 对不起,我模棱两可。您将需要保留原始文件并将新文件添加到包含列表中。所以,最后一个看起来像:&lt;source_dir&gt;\include\opencv;&lt;source_dir&gt;\include\opencv2;&lt;source_dir&gt;\include; 我已经编辑了我的答案以反映这一点。
  • 如果您必须更改的代码量较少,我建议您在属性中只包含一个包含目录,并将单个文件作为 添加到您的来源。
  • \include(除了两个已经提到的目录)只包含 CMakeList.txt,所以我看不出包含这个目录的意义。 \include\opencv2 包含 opencv.hpp,但是它包含其他文件,所以看起来没问题。无论如何,我已经包含了所有三个目录,但 Visual Studio 仍然无法识别任何 openCV 函数。
  • 之所以添加这个目录是因为,一些OpenCV的头文件中包含了基于这个的文件。例如,如果您查看 opencv.h:它有 #include "opencv2/core/core_c.h"。除非添加include,否则无法获取opencv2/...
猜你喜欢
  • 2012-07-09
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 2019-07-25
相关资源
最近更新 更多