画像をネガポジ反転する

画像をネガポジ反転するには OpenCv CookBookに示すように C++では Not演算 cv::Mat dst_img = ~src_img;で行えばOKです。
Javaでは 直接Bit演算できないので 以下のCoreクラスのメソッドでBit演算を行います。

static void bitwise_and(Mat src1, Mat src2, Mat dst)
static void bitwise_not(Mat src, Mat dst)
static void bitwise_or(Mat src1, Mat src2, Mat dst)
static void bitwise_xor(Mat src1, Mat src2, Mat dst)

さらにMat同士の演算には
static void gemm(Mat src1, Mat src2, double alpha, Mat src3, double gamma, Mat dst)
static void gemm(Mat src1, Mat src2, double alpha, Mat src3, double gamma, Mat dst, int flags)
static void add(Mat src1, Mat src2, Mat dst)
static void add(Mat src1, Mat src2, Mat dst, Mat mask)
static void add(Mat src1, Mat src2, Mat dst, Mat mask, int dtype)
static void subtract(Mat src1, Mat src2, Mat dst)
static void subtract(Mat src1, Mat src2, Mat dst, Mat mask)
static void subtract(Mat src1, Mat src2, Mat dst, Mat mask, int dtype)
static void multiply(Mat src1, Mat src2, Mat dst)
static void multiply(Mat src1, Mat src2, Mat dst, double scale)
static void multiply(Mat src1, Mat src2, Mat dst, double scale, int dtype)

等があります。
早速 bitwise_notを使ってネガ画像を表示して見ます。

Core.bitwise_not(mat, mat); 

(0)元の画像 (1)ネガ画像

なんだか正しいのかどうか わかりませんね
正確ではありませんが 葉っぱの色が #00CC33だとすると そのネガは  #FF33CCとなり 正しそうな感じです。

ちなみにOpenCv CookBookではネガポジ反転のサンプル画像として グレースケール画像を使っています。以前示した方法でグレースケールに変換し さらにネガポジ変換してみます。

(0)元の画像 (1)グレースケール
(2)グレースケールネガ

これだとネガっぽく見えますね。

なおネガポジ反転は BitMapのピクセル操作でもできますが OpenCvを使ったほうが 簡単にできますね。

 by Android2.2 with OpenCv 2.3.1 for Android   
スポンサーリンク
Rectangle大広告
Rectangle大広告

シェアする

  • このエントリーをはてなブックマークに追加

フォローする