バイナリマスクの1で示される値は実際の値であり、マスクで0の値は最終的な画像ではnullです。
Python Opencvを使用した他の2つの方法を示します。1つ目は@nathancyの方法と似ています。2つ目は乗算を使用してマスキングを行います。@ nathancyで提供されているものと同じ画像を使用します。
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)
結果はどちらの方法でも同じです: