如何在python中获得平面图的外部轮廓?

时间:2016-07-14 05:53:40

标签: opencv image-processing scikit-image

获得平面图外部轮廓的最佳方法是什么?

enter image description here

Snakes算法效果不佳,因为有些平面图太凸了。

1 个答案:

答案 0 :(得分:4)

您只需要在查找轮廓时调整grayScale图像的阈值以包含灰色虚线路径,因为输入图像的主要部分是白色,所以我们可以选择接近255的阈值,比如230.然后找到轮廓阈值。

您可以使用cv2.approxPolyDP来计算近似多项式形状,但它没有多大帮助,因此该步骤是可选的。

代码段可能如下所示:

import cv2

img = cv2.imread("/Users/anmoluppal/Downloads/1tl6D.jpg")

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, thresh = cv2.threshold(img_gray, 230, 255, cv2.THRESH_BINARY_INV)

img_, contours, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

largest_contour_area = 0
for cnt in contours:
    if (cv2.contourArea(cnt) > largest_contour_area):
        largest_contour_area = cv2.contourArea(cnt)
        largest_contour = cnt

epsilon = 0.001*cv2.arcLength(largest_contour,True)
approx = cv2.approxPolyDP(largest_contour,epsilon,True)

final = cv2.drawContours(img, [approx], 0, [0, 255, 0])

enter image description here