dポイントプレゼントキャンペーン実施中!

カメラを用いて動画から画像を取り込みトリミングしようとするプログラムを作っています.
最下部のプログラムを貼り付けているところまででデバックしつつ実行すると

"OpenCVwithDShow.exe の 0x00462614 でハンドルされていない例外が発生しました: 0xC0000094: Integer division by zero"

とエラー文がでてきます.
色々考えたのですが、原因が分からないのでどなたかご教授お願いします.
よろしくお願いします.


//トリミング
CvRect cvClipRect(IplImage *frame, CvRect r)
{
r.x = 240;
r.y = 0;
r.width = 1080;
r.height = 1680;
if (r.x < 0) {r.width += r.x; r.x = 0;}
if (r.y < 0) {r.height += r.y; r.y = 0;}
if (r.x >= frame->width ) {r.width -= r.x - frame->width ; r.x = frame->width - 1;}
if (r.y >= frame->height) {r.height -= r.y - frame->height; r.y = frame->height - 1;}
if (r.width > frame->width - r.x) {r.width = frame->width - r.x;}
if (r.height > frame->height - r.y) {r.height = frame->height - r.y;}
return r;
}

IplImage *cvCreateSubRectImage(IplImage *frame, CvRect r)
{
IplImage tmp;
CvMat submat;
cvGetSubRect(frame, &submat, cvClipRect(frame, r));
cvGetImage(&submat, &tmp);
return cvCloneImage(&tmp);
}
//トリミング終了



int main (int argc, char **argv){
CvCapture *capture = 0;
IplImage *frame = NULL;
IplImage *frame1 = NULL;
IplImage *reduce = NULL;
int c;
int x,y;
int max,min;
int h,s;
uchar p[3];
LabelingSS labeling;
short *src_buf;
float centerX,centerY;
HANDLE hCom;

//トリミング関数

// (1)コマンド引数によって指定された番号のカメラに対するキャプチャ構造体を作成する
if (argc == 1 || (argc == 2 && strlen (argv[1]) == 1 && isdigit (argv[1][0])))
capture = cvCreateCameraCapture (argc == 2 ? argv[1][0] - '0' : 0);
/* この設定は,利用するカメラに依存する */
// (2)キャプチャサイズを設定する.
cvNamedWindow ("Capture", CV_WINDOW_AUTOSIZE);
frame1 = cvQueryFrame (capture);
src_buf = new short[ frame1->width * frame1->height ];
// (3)カメラから画像をキャプチャする
while (1) {
frame1 = cvQueryFrame (capture);
frame = cvCloneImage(frame1);

//トリミング呼び出し
CvRect cvClipRect(IplImage *frame, CvRect r);
IplImage *cvCreateSubRectImage(IplImage *frame, CvRect r);

A 回答 (1件)

あの~、mittiさんが今まで同じような質問をして


回答がほとんどついていないかと思うのですが、
それには原因がありましてね、
1.OpenCVを使っている人が少ないこと
2.再現環境を持っていない人が多いこと
3.説明がヘタクソなこと(失礼)
4.やれることをやっていないこと
の4つぐらいの原因があるのですよ。
で、1,2,3はどうしようもないのでアレなんですが、
Integer division by zeroってのは、いわゆる0割ってやつでしてね、
割り算の分母に0を持ってきちゃいけないというルールがありますよね。
それを発生する可能性のある箇所をちょっとは調べたのかってことなんですよ。

ソースコードを拝見していると、ポインタのNULLチェックもしていないし、
そもそもね、キャプチャに問題があるか、トリミングに問題があるかね、
そこら辺は質問する前に切り分けができるんじゃないかと思うんですよ。
キャプチャが正常なら、トリミング処理をコメントアウトして、その画像を表示できればいいわけですから。
そこは確認されたんですかね。

キャプチャが正常なら、トリミング関数の変数の値をデバッガで
逐次表示したり、fprintfなどを使って表示させたりしてね、
問題の範囲を絞り込むことができるんですよ。

一般的な質問でしたら親切な回答者はね、手元で問題を再現させながら
回答するんですよ。しかし貴方の質問の場合はね、前述の1と2の理由でそれができないんですよ。
そうすると、貴方のソースコードから原因を類推するしかない。

結局ね、できるアドバイスは1つだけ。
トリミングが問題なのか、キャプチャが問題なのか、つまりは
正常に動いている部分はどこからどこまでなのか、まずチェックして下さい。
そして動かない部分のみを回答者に提示して下さい。
以上です。
    • good
    • 0
この回答へのお礼

回答有難うございます.
プログラミングについて理解不足でした.
以上のご指導頂いた点を試してみて,
もし理解できない場合は再度質問してみようと思います.
有難うございました.

お礼日時:2010/01/04 15:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!