Opencv + Visual Studio 2008 奇怪的调试问题
Posted
技术标签:
【中文标题】Opencv + Visual Studio 2008 奇怪的调试问题【英文标题】:Open CV + Visual Studio 2008 weird Debugging problem 【发布时间】: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 的问题有关。 如果有人知道我可以做些什么来解决这个问题,请回答,我将永远感激不尽。
谢谢, 亚历克斯
【问题讨论】:
【参考方案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 项目的属性页中指定要在调试器启动时传递给程序的命令行参数。这是“命令参数”设置。
【讨论】:
以上是关于Opencv + Visual Studio 2008 奇怪的调试问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 Cmake 为 Visual Studio 2015 构建 OpenCV 3.0.0 的 DLL
Win7_64bits下Visual Studio2012中安装配置OpenCV
Visual Studio 2017+OpenCV-入门之环境搭建