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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获得带孔的二元掩模的边界坐标?相关的知识,希望对你有一定的参考价值。

我有以下图像:

“测试图像”“>

我想获取一个列表,其中每个斑点的外轮廓和​​内部轮廓的坐标为(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 ...

答案

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

以上是关于如何获得带孔的二元掩模的边界坐标?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 lseek 创建带孔的文件?

带孔的 SVG 层

带孔的 Neopixel 矩阵

如何应用二元掩模去除皮肤病变彩色图像的背景

带孔的 Google-SDK-iOS 多边形

在three.js中将带孔的SVG路径转换为挤压形状