質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

3892閲覧

座標の輝度値

toyadai056

総合スコア34

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/03/27 12:45

for(j=200;j<310;j++){
for(i=50;i<170;i++){
sum=sum+((unsigned char*)(imgDst->imageData+imgDst->widthStepj))[i];
輝度値 = sum1 /(109
119) ;
i=x座標 y=y座標
上の式に座標値を入れて、ある領域の平均輝度値を求めたのでが、黒色を多く含んだ領域で100近くという少し大きすぎる結果が出てしまいました。
この式であっているのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ご質問のコードでは画像の大きさの計算に間違いがあるようですが情報が欠落しているのでそれ以外にも問題があるかどうかはっきりとはわかりません。

ためしに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));

手元に環境がないため間違いなどありましたらご容赦ください。

投稿2017/03/27 15:22

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

輝度値 = sum1 /(109*119) ;

縦横のピクセル数が間違っています。

縦ピクセル数 = 310 - 200 = 110
横ピクセル数 = 170 - 50 = 120

投稿2017/03/27 15:07

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問