contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
polygons = []
for obj in contours:
coords = []
for point in obj:
coords.append(int(point[0][0]))
coords.append(int(point[0][1]))
polygons.append(coords)
from skimage.io import imread
from skimage.measure import regionprops_table
from pandas import DataFrame
import numpy as np
import matplotlib.pyplot as plt
rectangle = imread('rectangle_img.png')
props_rect = DataFrame(regionprops_table(rectangle, properties=['coords']))
new_img = np.zeros((rectangle.shape[0], rectangle.shape[1]))
for point in props_rect['coords'][0]:
new_img[point[0], point[1]] = 1
plt.imshow(new_img)
4条答案
按热度按时间mzillmmw1#
cv2.findContours
适用于复杂形状和多个对象。Polygons
列表包含coords
列表,每个列表看起来像这样[x1,y1,x2,y2,x3,y3,...]。apeeds0o2#
可以使用
np.column_stack()
+np.where()
。其思想是确定二进制图像中的白色像素,然后按相应的(x, y)
顺序排序另一种方法是使用OpenCV的
cv2.boundingRect()
查找边界矩形的坐标。这将给予宽度、高度和左上角的(x,y)
坐标。这里有一个例子,找到坐标,然后绘制多边形到一个空白的面具plicqrtu3#
你可以把正方形当作一个对象,并使用
skimage.measure.regionprops
函数访问它的属性。我强烈建议您查看文档,因为它在许多情况下都是非常有用的功能:
https://scikit-image.org/docs/dev/api/skimage.measure.html#skimage.measure.regionprops
此外,还有
skimage.measure.regionprops_table
,它给了你一个字典来转换到Pandas框架。我的解决方案如下:
s1ag04yj4#
polygons
是一个list
,arrays
的形状为N, 2
,其中N
对应于点数,2
对应于x
和y
坐标