0

我用这个功能来分割字符图像,但是程序崩溃了,有人可以帮我找到解决办法,为什么它会崩溃?

4

1 回答 1

0

您需要查明导致崩溃的行。为此,我可以通过两种方式思考:

  • 使用调试器;
  • 或者如果您害怕,请使用以下printf()方法:

printf()方法涉及printf()在程序中的每个函数调用之后进行调用,因此当您运行应用程序时,您可以在控制台中看到最后printf()一条消息是什么。这将帮助您找到导致崩溃的代码。例子:

printf("dbg10\n");

IplImage *img_cv = cvLoadImage("plaque.jpg");
printf("dbg20\n");

cvSetImageROI(img_cv,cvRect(8,10,60,35));
printf("dbg30\n");

IplImage *img_pl = cvCreateImage( cvGetSize(img_cv),img_cv->depth,img_cv->nChannels);
printf("dbg40\n");

cvCopy(img_cv,img_pl, NULL);
printf("dbg50\n");

cvResetImageROI(img_cv);
printf("dbg60\n");

//etc

从我在您的代码中看到的情况来看,前 2 个调用有可能使您的应用程序崩溃:如果cvLoadImage()无法加载图像,它将返回一个 NULL 指针。由于下一个函数接收指针作为参数,它会尝试取消引用空指针,这可能会导致崩溃。解决方案?始终检查您拨打的电话的惊人回报:

IplImage *img_cv = cvLoadImage("plaque.jpg");
if (!img_cv)
{
   printf("Failed to load image.\n");
   exit(1);
}

cvSetImageROI(img_cv,cvRect(8,10,60,35));
于 2012-04-11T04:19:07.430 回答