【发布时间】:2022-06-10 20:31:13
【问题描述】:
我有一些图像和对应的 ROI 位置,我想用这些数据生成掩码图像,我尝试生成一些掩码图像,但是当只有一个 ROI 时它工作正常,但是当有更多超过两个 ROI 会导致 mask 连接。
有什么方法可以在不知道有多少 ROI 的情况下生成 Mask 图像?
代码:
import numpy as np
import cv2
from skimage import morphology
def get_mask(imgshape, roi):
mask = np.zeros(imgshape, dtype=np.int32)
mask = cv2.fillConvexPoly(mask, roi, 255)
mask = morphology.binary_closing(mask)
return mask
mask_img = get_mask((200,200), roi_pos)
ROI = [[104, 94],[105, 94],[106, 93],[105, 92],[104, 91],
[103, 92],[103, 93],[ 95, 94],[ 96, 94],[ 97, 92],[ 97, 91],
[ 97, 91],[ 95, 91],[ 94, 91],[ 93, 93],[ 94, 94]]
【问题讨论】:
-
你的逻辑错了。您正在做的是通过所有 ROI 点来获得多边形。这会将它们全部视为一个多边形,并为您提供您现在得到的结果。在我们看来,它看起来像 2 个集群,但对于计算机来说,它只会看起来像一个集群/多边形。因此,您只需将一组点单独传递给您的函数。您可以通过使点彼此靠近来尝试此操作。为此,请尝试使用任何聚类算法,例如 K-Means Clustering,然后逐个传递每个聚类。
标签: python opencv image-processing