私はこの関数を使用して文字画像をセグメント化しますが、プログラムがクラッシュします。なぜクラッシュするのか解決策を見つけてください。
質問する
300 次
1 に答える
0
クラッシュの原因となっている行を特定する必要があります。そのために、私は2つの方法で考えることができます:
- デバッガーを使用します。
- または、それが怖い場合は、次の
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 ポインターが返されます。次の関数はポインターをパラメーターとして受け取るため、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 に答える