如何添加多个二进制掩码?

Roc*_*son 2 python opencv numpy image-processing computer-vision

概念表征我有一组图像(不同焦距),在其中找到了二进制掩模。其中一些蒙版是重叠的,现在我想将所有这些蒙版添加在一起以生成一个大的图像蒙版。有没有办法将这些掩模添加在一起并仅考虑重叠区域一次。在考虑重叠区域时,应仅考虑具有最大边缘的区域(来自边缘检测)。

所以现在 mask 拥有所有图像的所有蒙版。现在我想将这些蒙版添加在一起。任何帮助表示赞赏。

这些是原始图像及其蒙版。 链接到图像

因此,如果橙色在重叠区域中具有更多数量的边缘检测点,则应予以考虑,而绿色应仅具有不常见的点。橙色和绿色是这里的两个蒙版。

for file in glob.glob("images/*.jpg")
      img = cv2.imread(file)  
      ret, mask = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY)  
Run Code Online (Sandbox Code Playgroud)

fmw*_*w42 5

这是使用 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)
Run Code Online (Sandbox Code Playgroud)

面具:

在此输入图像描述

在此输入图像描述

在此输入图像描述

在此输入图像描述

所得组合掩模:

在此输入图像描述

添加:

您也可以这样做:

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,w,c), (0,0,0), dtype=np.uint8)
for mask in masks:
    result = cv2.add(result, mask)

# show results
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

# save results
cv2.imwrite('mask1-4.png', result)
Run Code Online (Sandbox Code Playgroud)