打开CV + Visual Studio 2008奇怪的调试问题

时间:2009-11-19 21:06:38

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

我最近在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的问题有关。 如果有人知道我可以做些什么来解决这个问题,请回答,我会永远感激。

谢谢, 亚历

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

您需要验证您是否有足够的命令行参数。你应该在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 ...
}

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

答案 2 :(得分:0)

这不是一个直接的答案,但我会尝试询问OpenCV Yahoo Group。它非常活跃,有人肯定知道。任何时候我曾在那里问过一个问题,它会在几个小时后回复。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

正如其他答案所示,程序运行时没有命令行参数。你应该做R Samuel Klatchko said {{}}所以你的程序在没有它们的情况下正常工作。

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