C#で画像のHSBを抽出して描くツールを作ってみた

C#で画像ファイルの各画素のHSBを計算して、それを描くツールを作ってみました。WPFアプリです。日記です。 作った環境は下記です。

  • Visual Studio 2015 Express for Windows Desktop

  • Windows 8.1

目次

  1. アプリの目的
  2. 処理の流れ
  3. こうなった
    1. 各色の輝度を変えた画像
    2. 各色の彩度を変えた画像
  4. まとめ

アプリの目的

ある写真画像の特定の色を抽出したくて、Red、Green、Blue、Hue、Saturation、Brightnessのどのパラメータで計算をするのがよいのか試すためのものです。 PhotoShopやGimpを使えばすむ話なのかもしれませんが、インストールできないPCもありますので。

処理の流れ

  1. エクスプローラーからアプリのウィンドウへのドラッグアンドドロップで画像のファイル名を取得します。

  2. 画像をBitmapImageとして読み込みます。

  3. 読み込んだ画像データのフォーマットをPbgra32に変換します。

  4. フォーマット変換した画像データをByte配列にします。

  5. ボタンをクリックすると、ボタンの種類に従って、Byte配列をゴニョゴニョ計算して新しいByte配列を作ります。

  6. 計算結果のByte配列からImageSourceを作って、Imageコントロールに表示します。

こう見ると、そんなに難しいことはしてませんね。画像ファイルの読み込みに、BitmapImageクラスがBmp、Png、Jpg等から自動的にデコードしてくれるってのがありがたいです。

こうなった

試した画像は2つです。

各色の輝度を変えた画像

元画像はこれです。 160221-1-15 作ったアプリで表示させるとこうなります。 160221-1-01 160221-1-02 160221-1-03 160221-1-04 160221-1-05 輝度が0に近い部分では、計算結果があやしいですね。 160221-1-06 黒に近い部分は無彩色ということで。 160221-1-07

各色の彩度を変えた画像

元画像はこれでです。 160221-1-16 作ったアプリで表示させるとこうなります。 160221-1-08 160221-1-09 160221-1-10 160221-1-11 160221-1-12 彩度が0に近くなると、計算結果があやしいですね。 160221-1-13 白が有彩色、黒が無彩色を表します。 160221-1-14 全面輝度100%です。

まとめ

目的の画像を早速このツールで見てみましたが、想像していた方法では抽出できないことがわかりました。 画像処理って面白いかも。

公開日

広告