【问题标题】:OpenCV 2.3 and Visual Studio 2010OpenCV 2.3 和 Visual Studio 2010
【发布时间】:2011-10-03 17:44:39
【问题描述】:

我在使用 Visual Studio 2010 安装 openCV 2.3 时遇到很多麻烦。崩溃后崩溃,安装后崩溃,几周后我没有运气。 不幸的是,openCV 2.3 没有安装文档,并且目录结构和文件位置与 openCV 2.2 不同,这使得当前的教程几乎毫无用处。 :(

有没有人在 openCV 2.3 上取得过成功?有人可以尝试一下,让我知道它是 openCV 构建问题还是我的设置问题?

或者也许有人可以建议 openCV 的替代方案。我的最终目标是获取像素信息、使用修复功能以及 After Effects 和 Maya 的基本图像处理。

编辑:对不起,我以为我提出了错误!这是我运行代码时发生的情况:

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

  using namespace cv;

  int main()
  {

Mat image;
image = imread( "c:/image1.png", 1 );
namedWindow( "Gray image", CV_WINDOW_AUTOSIZE );
imshow( "Gray image", image );

      waitKey(0);
      return 0;
  }

它会一直运行到 imshow。如果我注释掉 imshow 它运行良好,没有错误。 这是我添加 IMSHOW 时的错误:

openCV_test.exe 中 0x76bfb727 处的未处理异常:Microsoft C++ 异常:内存位置 0x0015ec20 处的 cv::Exception。它让我可以选择中断或继续。

这是输出窗口显示的内容:

openCV_test.exe 中 0x76bfb727 处的第一次机会异常:Microsoft C++ 异常:cv::Exception at memory location 0x0015ec20.. openCV_test.exe 中 0x76bfb727 处未处理的异常:Microsoft C++ 异常:cv::Exception at memory location 0x0015ec20..

然后它继续打开 SYSTEM.CPP 并给我这个:

- exc {msg="......\modules\core\src\array.cpp:2482: error: (-206) Unrecognized or unsupported array type " code=-206 err="无法识别或不支持的数组类型" ...} const cv::Exception & + 标准::异常 {_Mywhat=0x00000000 _Mydofree=false } 标准::异常 + msg "......\modules\core\src\array.cpp:2482: error: (-206) Unrecognized or unsupported array type " std::basic_string,std::allocator > 代码 -206 整数 + 错误“无法识别或不支持的数组类型”std::basic_string,std::allocator > + func "" std::basic_string,std::allocator > + 文件“......\modules\core\src\array.cpp”std::basic_string,std::allocator > 第 2482 行 int

谢谢!

【问题讨论】:

  • 你遇到过什么样的问题?
  • 如果不知道具体问题是什么(编译时/运行时/等时出现错误消息),可能很难帮助您。所以你可能想告诉我们具体出了什么问题。
  • 停止安装并开始解决崩溃问题。在您记录您在问题中看到的内容和您知道的内容之前,您无法获得他们的帮助。
  • 对不起,伙计们...我忘了添加代码和错误。这些错误对我来说毫无意义......我希望它有所帮助。
  • 哦,包含错误...使用#include #include

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


【解决方案1】:

我有 OpenCV2.3,用 Visual Studio v9.0 安装没有问题。

您应该如何在所有 Visual Studio 版本中正确编译和运行您的项目:

项目的属性(右键单击它)

  • C/C++
    • 常规
      • 包含目录添加\OpenCV2.3\include\opencv2、\OpenCV2.3\include\opencv和\OpenCV2.3\include
  • 链接器
    • 常规
      • 添加lib目录\OpenCV2.3\lib
    • 输入
      • 添加所有库,如 opencv_core230d.lib opencv_highgui230d.lib 等等...

然后不要忘记将 dll 添加到您的系统路径中。 配置面板 > 系统 > 高级 > 环境变量 > 路径 您可以添加一个用户环境路径,该路径将覆盖另一个路径, 只需单击新建(如果您以前从未将目录添加到系统路径)并写入路径,例如:\OpenCV2.3\bin

如果没有更多信息,我希望它可以帮助......

朱利安,

【讨论】:

  • 感谢您回复 jmartel。这些也是我尝试过的步骤......等等。 :)
  • 我认为问题不在于我的安装,而在于我的这行代码: image = imread( "c:/image1.png", 1 );您能否测试我上面的代码并查看它是否运行...当您有时间时... :)
  • 感谢您的回答。我弄清楚了这个问题。这是 32 位和 64 位 dll 与编译器之间的冲突。当我使用 superpack 2.3 安装 VS 2010 时,我认为编译器会根据其在环境 vars 和 Vs2010 中的设置方式尝试使用 x86 和 x64 dll 的混合匹配。我通过在仅支持 x86 的编译器的另一台计算机上安装 VS2010 来解决这个问题,我完全没有遇到任何问题。一切正常!完全相同的设置,只有一个是 X86,另一个是 X86 和 X64。这没有意义,因为编译器应该选择一个对吗?而不是 x86 和 64 dll 的混合?
【解决方案2】:

有时,即使您有正确的路径设置,编译器也无法找到 dll。那时尝试将 dll 文件从 openCV 文件夹复制到您当前的项目(不是解决方案)文件夹。

【讨论】:

  • core230d.dll, highgui230d.dll.... 有趣的是,我昨天刚刚安装了 openCV 2.3,大部分设置都是一样的。除了它抱怨找不到 dll 文件时,我只是复制了我需要的 dll 并转储到项目根目录中,它现在就像一个魅力。
  • 您所描述的不是链接器问题。但无论如何,也许它可能会对 OP 有所帮助。
  • 哎呀我的意思是编译器..对不起
  • 谢谢尼克。我添加了所有的 .dll 和库。代码一直有效,直到我用 imshow 打了一行。我在上面更新了我的问题。 imshow 函数有问题。
  • 是的! imshow 对我有用.. 确保包含头文件存在 #include #include #include #include 和 core 和 highgui dll 都在那里
【解决方案3】:

我不会复制粘贴,而是链接:http://theroundedengineer.blogspot.com/2011/07/opencv-23-for-vs-2008-from-source.html

希望这会有所帮助。当然,我远不是 VS 2008 和 VS 2010 之间差异的专家。

【讨论】:

  • 感谢 Russbear。我跟着,仍然没有喜悦。 :(
  • 感谢您的回答。我弄清楚了这个问题。这是 32 位和 64 位 dll 与编译器之间的冲突。当我使用 superpack 2.3 安装 VS 2010 时,我认为编译器会根据其在环境 vars 和 Vs2010 中的设置方式尝试使用 x86 和 x64 dll 的混合匹配。我通过在仅支持 x86 的编译器的另一台计算机上安装 VS2010 来解决这个问题,我完全没有遇到任何问题。一切正常!完全相同的设置,只有一个是 X86,另一个是 X86 和 X64。这没有意义,因为编译器应该选择一个对吗?而不是 x86 和 64 dll 的混合?
【解决方案4】:

我遇到了完全相同的问题。我无法读取任何图像。我检查了数据标志和图像大小。该标志指示错误并且大小始终为 (0, 0)。虽然我不知道实际原因,但我可以通过某种方式避免该问题并正常运行我的程序。

一开始,我自己编译OpenCV。即使所有 dll 似乎都已正确创建并且没有构建错误,但我注意到标题文件夹没有正确组织。因此,我切换到 superpack 二进制文件并尝试静态链接。一开始有很多未定义的符号,所以我基本上只是将所有内容放入VS链接选项中。我必须输入到 VS 的库的数量非常荒谬,但这是测试 superpack 是否有效的好方法。

这些是我使用的。 opencv_core230d.lib;opencv_calib3d230d.lib;opencv_contrib230d.lib;opencv_features2d230d.lib;opencv_highgui230d.lib;opencv_legacy230d.lib;opencv_ml230d.lib;opencv_imgproc230d.lib;opencv_video230d.lib;libjasperd.lib;libjpegiffd.lib;libjpegiffd.lib;lib lib;zlibd.lib;

我还需要输入 Comctl32.lib 来解决链接错误。

我用 superpack 的静态库测试了我的程序。现在一切正常。 我使用的标题是

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>

我还没有尝试使用 dll,但我可以确认来自 superpack 的 VS 2010 + OpenCV 2.3 64 位工作。我希望你也能在超级包上获得一些好运。

(嗯,我不记得是我自己把opencv.hpp放在了opencv2文件夹中,还是从一开始就在那里。我做了很多事情让它工作,有点困惑。但是, 相信你可以自己解决这个问题,如果标题有任何问题。)

希望这会有所帮助, 拼音

【讨论】:

  • 感谢您的回答。我弄清楚了这个问题。这是 32 位和 64 位 dll 与编译器之间的冲突。当我使用 superpack 2.3 安装 VS 2010 时,我认为编译器会根据其在环境 vars 和 Vs2010 中的设置方式尝试使用 x86 和 x64 dll 的混合匹配。我通过在仅支持 x86 的编译器的另一台计算机上安装 VS2010 来解决这个问题,我完全没有遇到任何问题。一切正常!完全相同的设置,只有一个是 X86,另一个是 X86 和 X64。这没有意义,因为编译器应该选择一个对吗?而不是 x86 和 64 dll 的混合?
【解决方案5】:

你应该尝试制作一个循环结构:

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

using namespace cv;

int main(){

  Mat image;
  namedWindow( "Gray image", 2 );

    while(1){
       image = imread( "d://Gaa6P.png", 1 );
       imshow( "Gray image", image );
       waitKey(0);

    }

return 0;

}

【讨论】:

    【解决方案6】:

    检查您的防火墙。完全关闭防火墙。您的防病毒软件也可能会阻止该过程。 我遇到了同样的问题:cv::exception 用于内存,这就是原因。

    【讨论】:

      猜你喜欢
      • 2011-10-24
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多