ご質問のコードでは画像の大きさの計算に間違いがあるようですが情報が欠落しているのでそれ以外にも問題があるかどうかはっきりとはわかりません。
ためしにWebをみて次のようなことを考えつつ書いてみました。
forループの開始・終了位置や平均を出すための分母がそれぞれリテラルで書かれていると整合しているかどうか一々検算しないとわかりません。間違いようがないよう関連する値は計算によって求めてみました。
自分は普段二次元配列をアクセスするならiを一次元目、jを二次元目の制御変数として使ったり、座標データであれば水平方向をx, 垂直方向をyにします。単なる自分ルールですがアクセスすべき次元を間違えるようなことがこれだけでも防げます。
ご質問のコードではIplImage構造体の中身を生でアクセスしているようですが、マクロや関数なども用意されているようなのでそれを使った方がケアレスミスをなくせると思います。
c++
1// 以下の型定義があると仮定
2// typedef unsigned char uchar;
3// typedef unsigned int uint;
4
5const uint y_from = 200;
6const uint y_until = 310;
7const uint x_from = 50;
8const uint x_until = 170;
9
10const uint height = y_until - y_from;
11const uint width = x_until - x_from;
12...
13
14IplImage *gray_iamge = ...
15// gray_imageにはグレイスケール画像が1byte/pixelで格納されていると仮定
16
17uint sum = 0;
18for (uint y = y_from; y < y_until; j++) {
19 for (uint x = x_from; x < x_until; i++) {
20 sum += (uchar)CV_IMAGE_ELEM(grey_image, y, x);
21 }
22}
23uchar brightness = (uchar)(sum / (width * height));
手元に環境がないため間違いなどありましたらご容赦ください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。