2012年10月18日木曜日

OpenCVでcv::Matの平均を求める


画像の輝度値の平均を求める場合、各要素にアクセスし、輝度値の合計を求め、画素数でわれば輝度値の平均を求めることができる。
この場合、列と行でループをまわして、各要素へのアクセスをおこうなことになる。

OpenCVでは、平均を求める便利な関数cv::reduceが準備されている

C++: void reduce(InputArray src, OutputArray dst, int dim, int rtype, int dtype=-1 )

この関数では、1次元の方向しか処理を行わない
dim = 0 の場合、行方向に処理が行われ、列のみとなる
dim = 1 の場合、列方向に処理が行われ、行のみとなる

  rtypeは、処理の種類で下記のパラメータを指定する
CV_REDUCE_SUM 合計
CV_REDUCE_AVG 平均
CV_REDUCE_MAX 最大値
CV_REDUCE_MIN 最小値


画面全体の平均値を求めには、2回処理を繰り返せばよい。


ただし、縮退後のmatのタイプも自動的に入力のタイプに合せられるため、ucharのデータを使用すると結果もucharとなる

0 件のコメント:

コメントを投稿