« 顔認識プログラム 3 | トップページ | I.S Damu / The Making of Another Introduction from HOW IT SHOULD SOUND »

2010.07.15

グレースケール映像フィルタ
processing java

顔認識プログラムの副産物としてキャプチした映像をグレースケール表示にするプログラムを作った。
配列を一次元にしている訳ではなく、色相、彩度を0に変更しているだけなので処理が早くなる訳でもなし、ちょっと意味なし。


Bandw_2




package faceCatch;

//import processing
import java.awt.Color;

import processing.core.PApplet;
import processing.video.*;


public class BandW extends PApplet{

        ////////////////////////////////////////////////////////////////////////////

        private static final long serialVersionUID = 1L;

        //カメラオブジェクトの変数
        Capture camera;


        ////////////////////////////////////////////////////////////////////////////


        //コンストラクタ
        public BandW(){
        }

        public void setup(){

                size(320, 240);
                colorMode(HSB, 256);

                //Captureオブジェクトの準備
                camera = new Capture(this, 320, 240, 30);

        } //end of setup()

        public void draw(){

                //画面のピクセルのロード
                loadPixels();
                //カメラ画像のピクセルをロード
                camera.loadPixels();

                //値の検査
                for(int i = 0; i < height; i ++){
                        for(int j = 0; j < width; j++){
                                int pos = (i * width) + j;
                                //ピクセルの値を取得する(RGB)
                                int pixColor = camera.pixels[pos];


                                //16進数に変換
                                StringBuffer sb = new StringBuffer(Integer.toHexString(pixColor));

                                //16進数に変換した値が8桁だったら
                                if(String.valueOf(sb).length() == 8){
                                        //先頭のffを取り去る
                                        sb.delete(0, 2);

                                        //RGBをHSBに変換
                                        float pixcelHSB[] = Color.RGBtoHSB(rgb(sb.toString(), 1), rgb(sb.toString(), 2), rgb(sb.toString(), 3), null);

                                        pixels[pos] = Color.HSBtoRGB(0, 0, pixcelHSB[2]);

                                }
                        }
                }

                updatePixels();

                //カメラ画像の表示
                //image(camera, 0, 0);

        } //end of draw()

        //キャプチャ映像のイベントハンドラ
        public void captureEvent(Capture camera){
                camera.read();
        } //end of captureEvant

        //RGBを分解するメソッド
        public static int rgb(String rgb, int num){
                int rgbNum = 0;
                StringBuffer s = new StringBuffer(rgb);

                switch(num){
                        case 1:
                        //赤の処理
                        s.delete(2, 6);
                        break;
                        case 2:
                        //緑の処理
                        s.delete(0, 2);
                        s.delete(2, 4);
                        break;
                        case 3:
                        //青の処理
                        s.delete(0, 4);
                        break;
                }

                //16進数を10進数に変換する
                rgbNum = Integer.decode("0x" + s.toString()).intValue();
                return rgbNum;
        }
}



ちなみに、processingには便利で簡単なグレースケールのメソッドが用意されています。
filter(GRAY);と一行追加してやるだけで、OKです。


わかりやすいパターン認識わかりやすいパターン認識
価格 : ¥2,940 (税込み)

本格的なマルチメディア時代を迎えるにあたり、種々のメディアの効率的処理のための基本技術であるパターン認識を、初学者が独学で学べるようにわかりやすく解説したテキスト。

|

« 顔認識プログラム 3 | トップページ | I.S Damu / The Making of Another Introduction from HOW IT SHOULD SOUND »

processing」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/198455/48885897

この記事へのトラックバック一覧です: グレースケール映像フィルタ
processing java
:

« 顔認識プログラム 3 | トップページ | I.S Damu / The Making of Another Introduction from HOW IT SHOULD SOUND »