【发布时间】:2020-04-01 12:49:36
【问题描述】:
我已经使用 OpenCV 从掩码图像中成功提取了轮廓:
image = cv2.imread(file)
lower = np.array([240, 240, 240])
upper = np.array([255, 255, 255])
shape_mask = cv2.inRange(image, lower, upper)
contours, hierarchy = cv2.findContours(shape_mask.copy(), cv2.RETR_CCOMP,
cv2.CHAIN_APPROX_SIMPLE)
现在我该如何继续将此轮廓映射到一个多边形列表(带孔)中,并将它们导出为 SHP 文件?
这里给出部分答案: How to convert NumPy arrays obtained from cv2.findContours to Shapely polygons?
但是,这忽略了多边形内部有孔的情况。我将如何继续获得所有多边形?
【问题讨论】:
-
多个嵌套轮廓会发生什么?例如,我们不能将三个嵌套的轮廓表示为带孔的 Shapely Polygon。
-
我也想过这个。我在 GitHub 上找到的解决方案(见下文)通过创建一个 MultiPolygon 来解决这个问题,该 MultiPolygon 包含第一个轮廓作为带孔的多边形(第二个轮廓),第三个轮廓也作为带孔的多边形等。我对其进行了测试,它工作得很好(在 QGis 中打开很好)。关键是函数 cv2.findContours 中的“cv2.RETR_CCOMP”标志。
标签: python opencv polygon shapely