2012-04-10 60 views
0

我使用这个函数来分割字符图像,但程序crach,somone可以帮助我,请发现解决方案,为什么它crach?opencv字符无效分割

+1

可以运行在调试模式下,并告诉我们哪一行崩溃吗?你使用哪种操作系统和编译器? – dannyxyz22 2012-04-11 00:52:13

+0

我使用Qt创建器进行编译,但是我认为我没有编译问题,因为当我尝试执行SetImageROI时,只执行了五行,但是当我添加CvFindContours的代码时,它出现了问题,所以我认为我有问题在轮廓码 – Butterflay 2012-04-11 10:30:31

+0

中如果此问题已成功解答,请考虑选择正确答案,方法是单击旁边的复选框。如果不是,请考虑添加自己的答案。 – karlphillip 2012-06-05 23:29:07

回答

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()无法加载图像会返回一个空指针。由于下一个函数将指针作为参数接收,它将尝试解除引用空指针并导致崩溃。解? 经常检查吓坏回电话,你让

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)); 
+0

我尝试添加Printf(),但它不适用于它!!! it crach – Butterflay 2012-04-11 10:33:59

+0

printf调用只是为了给您提示崩溃发生的位置,它不会解决问题。 – karlphillip 2012-04-11 11:45:01