Python - 将二进制掩码转换为多边形

标签 python numpy coordinates polygon mask

给定一个简单的二进制掩码(例如矩形的边界)。

binary mask

如何使用多边形来获取 x-y 坐标?

这是我迄今为止尝试过的:

coords = np.transpose(np.nonzero(mask))

然而,这种方法会生成一个填充的对象,而不是所需的边界。
plt.plot(coords[:, 1], coords[:,0])

unwanted output

基本上,我想要一个白色像素的 x-y 坐标列表,以使用此列表重新绘制矩形(未填充)。

最佳答案

您可以使用 np.column_stack() + np.where() .这个想法是确定二值图像中的白色像素,然后在相应的 (x, y) 中排序。命令

coords = np.column_stack(np.where(image > 0))

另一种方法是使用 OpenCV 的 cv2.boundingRect() 找到边界矩形的坐标。 .这将为您提供宽度、高度和左上角 (x,y)坐标。这是一个查找坐标然后将多边形绘制到空白蒙版上的示例


import cv2
import numpy as np

image = cv2.imread('1.png', 0)
x,y,w,h = cv2.boundingRect(image)
mask = np.ones(image.shape, dtype=np.uint8) * 255
mask = cv2.merge([mask,mask,mask])
cv2.rectangle(mask, (x, y), (x + w, y + h), (36,255,12), 2)

cv2.imshow('mask', mask)
cv2.waitKey()

关于Python - 将二进制掩码转换为多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58884265/

相关文章:

python - 一一训练scikit svm(在线或随机训练)

python - 如何使用 smtplib 查看电子邮件中的文本文件和图像文件

python - eval()是否比自己分析的好?

python - 使用 FFT 进行 2D 场的 3D 数组表示

python - 将纬度、经度转换为距赤道的距离(以公里为单位)并将四舍五入转换为最近的公里

python - pyautogui 鼠标单击在某些程序中不起作用

python - NumPy 数组的就地类型转换

swift - 快速从 .npy 转换为 MLMultiArray 以进行 CoreML 预测

android - 将 TextView 放在右下角

iphone - iOS:关于在屏幕上渲染纹理的纹理坐标的困惑