黄昏より暗きもの、血の流れより赤きもの

読者です 読者をやめる 読者になる 読者になる

黄昏より暗きもの、血の流れより赤きもの

自分の好きな事を好きなように書いて行きます。

OpenCVで画像のヒストグラムのデータをファイルに出力

C言語 OpenCV

問題を解くにあたって

本問題を解くにはOpenCVの環境設定が必要です。お手数ですがこちらを参考に、環境設定を行って下さい。

問題(プログラムの簡単な説明)

画像は1*1のピクセルが縦*横分だけ並ベて構成されている。ここで各ピクセルの色は赤、緑、青*1の3色(要素)を混ぜ合わせることで表現されている。この時各要素の濃さを0~255の整数で表したものを各要素における画素値と呼ぶ事にする。さらにx=0,1,2,.....,255を満たす整数とし、読み込んだ画像の画素値xを横軸に、画素値がxのピクセルの個数を縦軸に取ったものを各要素の画素値におけるヒストグラムと呼ぶ事にする。

このとき読み込んだ画像において、赤の画素値におけるヒストグラムの横軸と縦軸の値、緑の画素値におけるヒストグラムの横軸と縦軸の値、青の画素値におけるヒストグラムの横軸と縦軸の値を以下のような条件を満たしたファイルに書き出す関数void cvOutputHistgram(IplImage *img)を作成せよ。

  1. 赤の画素値、緑の画素値、青の画素値はそれぞれ別のファイルで作成せよ。
  2. csvファイルは「横軸の値,縦軸の値」と横軸と縦軸の各値を","で区切って作成せよ。

[ヒント]:OpenCVを使って画像の赤の画素値、緑の画素値、青の画素値を取得したい場合は「基本構造体(OpenCV-1.0 リファレンスマニュアル)」をご参照下さい。

求める結果

万一main関数などを使って実行結果を表示する場合は、以下の画像を読み込み、青のヒストグラムのファイルの値が以下のようになっていれば良いです。(xが0から10の範囲までを表示しています)

画像ファイル

送信者 2012年11月30日

結果のcsvファイル

ソースコードの解説

まず赤、緑、青のヒストグラムの横軸縦軸の値を保存するファイルを用意。ファイルオープンに失敗したら、その時点で終了するようにしました。

次にピクセル毎に赤、緑、青の値を取得し、各画素値に対応する配列の要素の値を1加算していきます。

最後にfprintf関数を使ってファイルを書き出し、書き出し後fcloseでファイルを閉じて完成です。

ソースコード(メソッドのみ紹介)

完全版につきましては、gitHub(CalchistgramAll.c)の方を参照して下さい。

実行結果

ターミナルより「./プロジェクト名 読ませたいファイル」と入力し、冒頭の画像を読み込ませた所以下のようにヒストグラムの縦軸、横軸の値が得られたので、問題なく動作しています。

画像のヒストグラムについて

本プログラムは、途中の製作過程を問題形式にしたものです。画像のヒストグラムの情報をexcel等で編集するために作成しました。

*1:RGB色空間とも呼ばれます