web-dev-qa-db-ja.com

バイナリマスクで画像をマスクする方法

ここにグレースケール画像があるとします: enter image description here

そして、ここにバイナリのマスク画像: enter image description here

同じ寸法と形状。このようなものをどのように生成しますか: enter image description here

バイナリマスクの1で示される値は実際の値であり、マスクで0の値は最終的な画像ではnullです。

3
Sibh

Python Opencvを使用した他の2つの方法を示します。1つ目は@nathancyの方法と似ています。2つ目は乗算を使用してマスキングを行います。@ nathancyで提供されているものと同じ画像を使用します。

enter image description here

enter image description here

import cv2
import numpy as np

# read image
img = cv2.imread('pink_flower.png')

#mask it - method 1:
# read mask as grayscale in range 0 to 255
mask1 = cv2.imread('pink_flower_mask.png',0)
result1 = img.copy()
result1[mask1 == 0] = 0
result1[mask1 != 0] = img[mask1 != 0]

# mask it - method 2:
# read mask normally, but divide by 255.0, so range is 0 to 1 as float
mask2 = cv2.imread('pink_flower_mask.png') / 255.0
# mask by multiplication, clip to range 0 to 255 and make integer
result2 = (img * mask2).clip(0, 255).astype(np.uint8)

cv2.imshow('image', img)
cv2.imshow('mask1', mask1)
cv2.imshow('masked image1', result1)
cv2.imshow('masked image2', result2)
cv2.waitKey(0)
cv2.destroyAllWindows()

# save results
cv2.imwrite('pink_flower_masked1.png', result1)
cv2.imwrite('pink_flower_masked2.png', result2)


結果はどちらの方法でも同じです:

enter image description here

0
fmw42