如何从二进制图像中找到多边形形状的坐标?

How to find coordinate of polygon shape from binary image?

下图,dark area0bright area255。我想从此图像中找到 bright area4 坐标 [(x1, y1),(x2, y2),(x3, y3),(x4, y4)]。这 bright area 将是 polygon shape (pentagon, hexagon, triangle etc.).

我尝试使用 cv2.findContours() 函数,如下代码:

# Find contour(s)
cnts, _ = cv2.findContours(bin_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)    
print(cnts)

我也试过使用 np.where() 函数,如下代码:

idx_points = np.where(bin_img == 255)
print(idx_points)

我找不到像 [(x1, y1),(x2, y2),(x3, y3),(x4, y4),(x5,y5), ...] 这样的预期结果。我该怎么做才能达到预期效果?

根据他们的教程,https://docs.opencv.org/3.4/d4/d73/tutorial_py_contours_begin.html,这正是 cv2.CHAIN_APPROX_SIMPLE 将为您做的:

左图显示cv2.CHAIN_APPROX_NONE,保留所有轮廓点,不做任何尝试。右侧部分显示 cv2.CHAIN_APPROX_SIMPLE 仅尝试识别和存储角点。 (图片来自同一教程页面)