色空間の変換ということですが、そもそも色空間ってなんでしょう?
Google先生に聞いてみると、「色」を数値の組合せで表現する方法を指すようで、RGBと言われればイメージしやすいですね。
RGBは色を赤(R)・緑(G)・青(B)の3つの色の組み合わせで表現するおなじみのヤツです。
では、まずは画像の表示です。
[drawable]フォルダに適当なpng画像を放り込みます。
BitmapFactoryのstaticメソッド、decodeResourceメソッドでBitmapクラスのオブジェクトを作成します。
Bitmap src = BitmapFactory.decodeResource(getResources(), R.drawable.chromeicon);
続いてUtils.bitmapToMatメソッドでBitmapをMatに変換します。
Mat mat = Utils.bitmapToMat(src);
あとは同じ手順で画像を表示出来ます。
画像がうまく表示されたら、画像を表示する前に色空間を変換してみましょう。
色空間を変換するには、Imgproc.cvtColor(src, dst, code)を使います。
そう、前回BGRAからRGBAへ変換したあのメソッドです。
もう既に色空間の変換を行っていた訳ですね。
Imgproc.cvtColor(mat , mat, Imgproc.COLOR_RGB2YUV);
変換後の画像を表示してみると。。。
うーん。。。また何か降臨してしまいました。
いくつか試してみようということで、第3引数を色々と変更してみます。
Imgproc.cvtColor(mat, mat, Imgproc.COLOR_RGB2BGRA);
結局4チャンネルのBGRAで出力しなくてはいけないということでしょうか?
一度何かに変換後に、再度BGRAに変換してみます。
Imgproc.cvtColor(mat, mat, Imgproc.COLOR_RGB2YUV); Imgproc.cvtColor(mat, mat, Imgproc.COLOR_YUV2BGR, 4);
グレースケール。
Imgproc.cvtColor(mat, mat, Imgproc.COLOR_RGB2GRAY); Imgproc.cvtColor(mat, mat, Imgproc.COLOR_GRAY2BGRA, 4);
概ねうまくいったような気がします。
0 コメント:
コメントを投稿