二进制标记只是具有0或1个值的图像大小的矩阵,当应用蒙版时,发生的一切是将每个值与其蒙版值相乘,如果要删除像素,则蒙版值为0,因此相乘时会得到一个黑色像素,如果不删除该像素,则将保留原始值,因为其乘以1。
要合并遮罩,只需将遮罩添加在一起,任何不应该遮罩的区域将保持为0。
在此简单的操作之后,要做类似的事情
combined_masks[combined_masks > 1] = 1
这将再次将您的蒙版转换为二进制蒙版
因此,基本上可以将其视为维恩图,如果有2个重叠的圆作为您的蒙版,则这些圆的并集将成为组合的蒙版
如下所示,A和B是您的蒙版,灰色区域,它们的“联合”是您组合的蒙版
更新:::如果您只想在这些蒙版中使用公共区域,则仍然可以将这些蒙版加在一起并执行以下操作
combined_masks /= total_num_masks
combined_masks[combined_masks < 1] = 0
更新:::假设您有n个形状为img_w,img_h的蒙版,这就是将它们组合起来的方式。
unified_masks = np.zeros((img_w,img_h))
for mask in list_of_masks:
unified_masks += mask
unified_masks[unified_masks > 1] = 1
,
这是使用Python / OpenCV一起添加多个蒙版的一种方法。
- 阅读蒙版并转换为浮点数,范围为0到1
- 使用Python加法添加掩码并乘以255
- 将生成的蒙版剪切到0到255的范围内,然后转换回int。
import cv2
# read masks
mask1 = cv2.imread('mask1.png').astype("float32")
mask2 = cv2.imread('mask2.png').astype("float32")
mask3 = cv2.imread('mask3.png').astype("float32")
mask4 = cv2.imread('mask4.png').astype("float32")
# add masks
result = 255*(mask1 + mask2 + mask3 + mask4)
result = result.clip(0,255).astype("uint8")
# show results
cv2.imshow('result',result)
cv2.waitKey(0)
cv2.destroyAllWindows()
# save results
cv2.imwrite('mask1-4.png',result)
面具:
生成的组合蒙版:
添加:
您也可以这样:
import cv2
import numpy as np
# read masks
mask1 = cv2.imread('mask1.png')
mask2 = cv2.imread('mask2.png')
mask3 = cv2.imread('mask3.png')
mask4 = cv2.imread('mask4.png')
# make list
masks = [mask1,mask2,mask3,mask4]
# add masks
h,w,c = mask1.shape
result = np.full((h,c),(0,0),dtype=np.uint8)
for mask in masks:
result = cv2.add(result,mask)
# show results
cv2.imshow('result',result)
本文链接:https://www.f2er.com/3168997.html