2012-04-10 62 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