2012年2月19日日曜日

画像をネガポジ反転する - OpenCV for Android



画像をネガポジ反転するには、C++では単純にNot演算子「~」でMatを反転します。

Javaでは直接オブジェクトをビット演算出来ないので、Coreに用意されたstaticメソッドを利用します。

各ビット演算にあたるのは、Core.bitwise_and()、Core.bitwise_or()、Core.bitwise_not()、Core.bitwise_xor()です。
同じくMat同士の算術演算ではCore.gemm()、Core.add()、Core.subtract()、Core.multiply()あたりを利用します。

Core.bitwise_not(Mat src, Mat dst)


 Mat src        処理したい元画像のMat
 Mat dst        変換後Mat


それでは実際にやってみましょう。

いつもの画像を反転してみます。
Core.bitwise_not(mat, mat);


うーん。。これであってるんでしょうか?
良く分からないのでグレースケールに変換してからやってみましょう。
まず普通にグレースケールへ変換。



続いてネガポジ反転。



うーん。。。
何やら思っていたのと違います。

画像を変えてみましょう。
私のエルニドフォルダから一枚。


グレースケール。


ネガポジ反転。
Imgproc.cvtColor(mat, mat, Imgproc.COLOR_RGB2GRAY);
Core.bitwise_not(mat, mat);
Imgproc.cvtColor(mat, mat, Imgproc.COLOR_GRAY2BGRA, 4);



想定した結果になりました。
ちなみにBGRAに変換した後に反転すると以下のようになります。


処理はBGRAへ変換する前に実施するべきなようです。
Chromeの画像もそのようにしたところうまくいきました。



関係無いですが、エルニドはいいところです。

0 コメント:

コメントを投稿