画像をネガポジ反転するには、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 件のコメント:
コメントを投稿