Python OpenCV3でマスク処理してみる(おまけあり)


かっこいいマスク処理を目指して!

 

前提

ディレクトリ構成などはこことかこことか。

 

元画像

蔵の画像(kura.jpg)を使う。

kura

 

また、マスクとなる画像として、同じ大きさの白黒のハート画像(heart.jpg)を用意。
ハート画像と同じ大きさの、8bit画像を用意する。

heart

 

bitwise_andメソッドの使い方

bitwize_andメソッドの使い方は次の通り。

cv2.bitwize_and(img_src, img_src2(img_srcと同じものでいい), mask=img_mask(マスク画像をinreadしておく))

この引数に入力画像と同じ大きさのマスク画像を指定することで、mask画像の画素値が0(黒)以外部分のみを表示することができる。
 

マスク処理

実際にマスク処理をしてみる。
sourceディレクトリにmask.pyを作成する。

# -*- coding: utf-8 -*-

import cv2
import numpy as np

if __name__ == '__main__':

    # 画像の読み込み
    img_src = cv2.imread("./image/kura.jpg", 1)

    # マスク画像の読み込み
    img_mask = cv2.imread("./image/heart.jpg", 0)

    img_masked = cv2.bitwise_and(img_src, img_src, mask=img_mask )


    # 表示
    cv2.imshow("Show MASK Image", img_masked)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

実行してみる。

スクリーンショット 2015-07-06 1.47.07

 

ちょっとボサボサしてしまったけど、綺麗。

 

おまけ1

ipythonでbitwise_andの使い方を見ようとした時に、

In [2]: cv2.bitwise_
cv2.bitwise_and  cv2.bitwise_not  cv2.bitwise_or   cv2.bitwise_xor

とあったため、試しにbitwise_andの部分をbitwize_notに変えてみたところ、

スクリーンショット 2015-07-06 1.49.35

 

と黒い部分を表示し、白い部分にマスクがかかってみえるようになった。

 

おまけ2

bitwise_andメソッドの引数で

    img_masked = cv2.bitwise_and(img_src, img_src, mask=img_mask )

のように指定したが、img_src2として空の画像(sora.jpg)

sora

を読み込み、2つ目のimg_srcをimg_src2に変更してみた。

# -*- coding: utf-8 -*-

import cv2
import numpy as np

if __name__ == '__main__':

    # 画像の読み込み
    img_src = cv2.imread("./image/kura.jpg", 1)

    # 画像の読み込み
    img_src2 = cv2.imread("./image/sora.jpg", 1)

    # マスク画像の読み込み
    img_mask = cv2.imread("./image/heart.jpg", 0)

    img_masked = cv2.bitwise_and(img_src, img_src2, mask=img_mask )


    # 表示
    cv2.imshow("Show MASK Image", img_masked)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

実行してみると、

スクリーンショット 2015-07-06 1.54.39

と空のまだらが出てこれはこれで。

仕様は後ほど調べる。(っていうと大体やらない。)
 

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です