对于复杂的轮廓可能涉及局部封闭的区域,使用cv2.drawContours()以填充的方式进行可视化时,得到的效果跟掩码中提供的不太一致,这里推荐使用连通区域分析方法来可视化掩码信息:
import cv2
def visual_image_with_mask(image, mask, visual_color=(0, 255, 0)):
# 进行连通区域分析
num_labels, labels, _, _ = cv2.connectedComponentsWithStats(mask)
image_visual = image.copy()
for label in range(1, num_labels): # 跳过背景
image_visual[labels == label] = visual_color
return image_visual
if __name__ == '__main__':
image_path = './image.jpg'
mask_path = './mask.png'
image = cv2.imread(image_path)
mask = cv2.imread(mask_path, 0)
image_visual = visual_image_with_mask(
image, mask, visual_color=(0, 255, 0)
)
cv2.imwrite('./image_visual.jpg', image_visual)