如何获得带孔的二元掩模的边界坐标?

问题描述 投票:1回答:1

我有以下图像:

“测试图像”“>

我想获取一个列表,其中每个斑点的外轮廓和​​内部轮廓的坐标为(x, y)(我们将其称为斑点A和B)。

import cv2
from skimage import measure

blob = cv2.imread('blob.png', 0)
contours, hier = cv2.findContours(blob, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
labels = measure.label(blob)
props = measure.regionprops(labels)

for ii in range(0,len(props))
xy = props[ii].coords

plt.figure(figsize=(18, 16))
plt.imshow(blob, cmap='gray')
plt.plot(xy[:, 0], xy[:,1])
plt.show()

(x, y)坐标列表A和B中绘制蓝色和红色的所需输出图像:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9pbVYzVC5wbmcifQ==” alt =“所需的输出”>

我有以下图像:我想获取一个列表,其中包含每个斑点的外轮廓和​​内轮廓的(x,y)坐标(我们将其称为斑点A和B)。从skimage导入度量导入cv2 ...

python opencv contour
1个回答
1
投票

您直接从(x, y)获得cv2.findContours坐标。要识别单个斑点,请查看层次结构cv2.findContours。第四个索引告诉您,可能的内部(或子级)轮廓与哪个外部(或父级)轮廓相关。大多数外部轮廓的索引为hier,其他所有轮廓的索引均为非负值。因此,对于绘制/绘图,天真的方法是在迭代轮廓时,每次看到-1时都会增加blob计数器,并以相同的颜色绘制所有轮廓,直到显示下一个-1

© www.soinside.com 2019 - 2024. All rights reserved.