2024年3月12日 更新

Pythonで画像処理 マスク処理

Pythonで画像を操作する方法を簡単に解説しています。

34,277 view お気に入り 0
上の画像を見てみると、背景はおよそ明るさ(輝度値)が210以上であることがわかります。今回は輝度値が210以上の領域を0に、210未満の領域を1にしてみます。
import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('001.jpg' ,0)
img[img < 210] = 1
img[img >= 210] = 0

plt.imshow(img)
plt.colorbar()
plt.show()
bin.py
 (3632)

シルエットが表示されたと思います。カラーバーを見てみると、自動的に0~1に幅がスケールされていますね。
img[img < 210] = 0 の意味するものは、「imgの210未満の画素値を持つ場所については、imgのその場所の画素値を0にする」というようなものです。

画像どうしの掛け算

次に画像どうしの掛け算をしてみたいと思います。NumPyで*演算子を使った場合、要素ごとの積になります。いわゆる行列の積ではないので注意です!せっかくですので、ここまでで作ったマスク画像(ネズミがいる領域が1で他が0になっている画像)を活用します。

このマスク画像と元の画像を掛け算するとどうなるでしょうか。。。
import cv2
import numpy as np
import matplotlib.pyplot as plt

img1 = cv2.imread('001.jpg' ,0)
img2 = cv2.imread('001.jpg' ,0)

img2[img2 < 210] = 1
img2[img2 >= 210] = 0

img3 = img1*img2

plt.imshow(img3)
plt.colorbar()
plt.show()
mask.py
 (3636)

こんな感じに背景部分が0になった画像ができたと思います。すなわち、マスク画像で1になっている部分は1を掛けるのでそのままに、0になっている部分は0を掛けるので0になるということです。

実はもっと簡単に書くこともできます

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('001.jpg' ,0)
img[img >= 210] = 0

plt.imshow(img)
plt.colorbar()
plt.show()
mask2.py
2個前のコードから、img[img >= 210] = 0を抜くだけですね。全く同じ出力が得られます。

続きます!

次回もこんな感じでNumPyを使った小技的なものを紹介していきます!
30 件

関連する記事 こんな記事も人気です♪

現役JDと学ぶ画像処理入門①〜openCV入門〜

現役JDと学ぶ画像処理入門①〜openCV入門〜

openCV入門(画像の読み込み、表示、保存、線形変換、拡大縮小)
広部ゆりか | 57,302 view
Morphology (モルフォロジー) 変換の実装 ~ Python + OpenCV ~

Morphology (モルフォロジー) 変換の実装 ~ Python + OpenCV ~

画像処理の一つ,モルフォロジー変換をPython と OpenCVのライブラリを用いて実装し,それを2値画像に対して適用します.
等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 2

等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 2

前回の記事「等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 1」の続きです. 実際に実装をして,写像を確かめてみます.
画像のセグメンテーション - Level set 法の実装 (Chan-Vese) -

画像のセグメンテーション - Level set 法の実装 (Chan-Vese) -

画像処理のセグメンテーションの分野で用いられるLevel set 法を用いて画像のセグメンテーションを行います.
画像の一部を消すInpainting という技術とその実装 (python)

画像の一部を消すInpainting という技術とその実装 (python)

Python + OpenCVにより,画像の修復の技術,「Inpainting 」の実装を行います.

この記事のキーワード

この記事のキュレーター

Mochizuki Mochizuki