【问题标题】:Open CV + Visual Studio 2008 weird Debugging problemOpencv + Visual Studio 2008 奇怪的调试问题
【发布时间】:2009-11-19 21:06:37
【问题描述】:

我最近在 Visual Studio 2008 专业版下安装了 OpenCV2.0,构建了库、dll-s 并且一切正常,但是当我运行第一个示例程序时:

#include “highgui.h”
int main( int argc, char** argv ) {
IplImage* img = cvLoadImage( argv[1] );
cvNamedWindow( “Example1”, CV_WINDOW_AUTOSIZE );
cvShowImage( “Example1”, img );
cvWaitKey(0);
cvReleaseImage( &img );
cvDestroyWindow( “Example1” );
}

它直接进入调试模式,但有以下异常:Unhandled exception at 0x7855b9f0 in HelloOpenCV.exe: 0xC0000005: Access violation reading location 0x00000000.

它还切换到“loadsave.cpp”文件并指向该行:

return (IplImage*)cv::imread_(filename, iscolor, cv::LOAD_IMAGE );

在堆栈点:> highgui200.dll!cvLoadImage(const char * filename=0x00000000, int iscolor=1) Line 474 + 0x13 bytes C++

我还用Visual Studio调试窗口link text做了一个打印屏幕

我认为这与放错位置的依赖项、dll-s 的问题有关。 如果有人知道我可以做些什么来解决这个问题,请回答,我将永远感激不尽。

谢谢, 亚历克斯

【问题讨论】:

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


    【解决方案1】:

    您是否在命令行参数中为argv[1] 指定了一个有效文件,即要读取的图像的filename

    【讨论】:

      【解决方案2】:

      您需要验证您是否有足够的命令行参数。您应该在 main() 的开头添加这样的内容:

      if (argc < 2)
      {
          fputs("Usage: prog filename\n", stderr);
          exit(1);
      }
      else if (argc > 2)
      {
          fputs("ignoring extra parameters\n", stdout);
      }
      

      您还可以修改代码以依次使用每个命令行选项(如果您这样做,您会希望删除上面示例中有关额外参数的警告):

      int arg;
      for (arg = 1; arg < argc; ++arg)
      {
          IplImage* img = cvLoadImage( argv[arg] );
      
          ... the rest of your code ...
      }
      

      最后,由于屏幕截图显示您正在调试器中启动可执行文件,因此您需要修改属性以添加命令行参数。在项目的属性中,您要选择“调试”选项卡,然后将文件添加到“命令参数”。

      【讨论】:

        【解决方案3】:

        这不是一个直接的答案,但我会尝试在OpenCV Yahoo Group 上提问。它非常活跃,肯定会有人知道。每当我在那里提出问题时,都会在几个小时内得到答复。

        【讨论】:

          【解决方案4】:

          我认为你的命令行参数不正确

          确保命令行参数的有效性。

          【讨论】:

            【解决方案5】:

            正如其他答案所表明的那样,程序在没有命令行参数的情况下运行。您应该执行R Samuel Klatchko said 的操作,以便您的程序在没有它们的情况下正常运行。

            但除此之外,为了帮助您使用正确的参数进行调试,您可以在“调试”“选项卡”上的 VS 项目的属性页中指定要在调试器启动时传递给程序的命令行参数。这是“命令参数”设置。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-03-11
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多