Python OpenCV3でマスク処理してみる(おまけあり)
かっこいいマスク処理を目指して!
[amazonjs asin="4061538225″ locale="JP" title="OpenCVによる画像処理入門 (KS情報科学専門書)"]
前提
元画像
蔵の画像(kura.jpg)を使う。
また、マスクとなる画像として、同じ大きさの白黒のハート画像(heart.jpg)を用意。
ハート画像と同じ大きさの、8bit画像を用意する。
bitwise_andメソッドの使い方
bitwize_andメソッドの使い方は次の通り。
[python title="bitwize_andメソッドの使い方"]
cv2.bitwize_and(img_src, img_src2(img_srcと同じものでいい), mask=img_mask(マスク画像をinreadしておく))
[/python]
この引数に入力画像と同じ大きさのマスク画像を指定することで、mask画像の画素値が0(黒)以外部分のみを表示することができる。
マスク処理
実際にマスク処理をしてみる。
sourceディレクトリにmask.pyを作成する。
[python title="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()
[/python]
実行してみる。
ちょっとボサボサしてしまったけど、綺麗。
おまけ1
ipythonでbitwise_andの使い方を見ようとした時に、
[shell]
In [2]: cv2.bitwise_
cv2.bitwise_and cv2.bitwise_not cv2.bitwise_or cv2.bitwise_xor
[/shell]
とあったため、試しにbitwise_andの部分をbitwize_notに変えてみたところ、
と黒い部分を表示し、白い部分にマスクがかかってみえるようになった。
おまけ2
bitwise_andメソッドの引数で
[python]
img_masked = cv2.bitwise_and(img_src, img_src, mask=img_mask )
[/python]
のように指定したが、img_src2として空の画像(sora.jpg)
を読み込み、2つ目のimg_srcをimg_src2に変更してみた。
[python title="改造したmask.pyの内容"]
# -*- 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()
[/python]
実行してみると、
と空のまだらが出てこれはこれで。
仕様は後ほど調べる。(っていうと大体やらない。)
ディスカッション
コメント一覧
まだ、コメントがありません