如何在OpenCV中从边缘转换为轮廓

时间:2018-04-01 22:13:13

标签: python opencv edge-detection opencv-contour

我在边缘检测后得到这样的图像: edge detection

我希望它将边缘连接成直线多边形。

我认为这可以使用带有链近似的findCountours来完成,但这对我来说似乎并不适合。

如何将上面的图像转换为简单的直线多边形(看起来像倾斜的三角形和梯形和正方形)?

2 个答案:

答案 0 :(得分:1)

您需要首先检测线条,然后构建轮廓。您可以使用HoughLines()执行此操作。有short tutorial here

答案 1 :(得分:1)

模糊图像,然后找到轮廓。

如果边缘靠近在一起,则会出现类似

的简单模糊
def blur_image(image, amount=3):
    '''Blurs the image
    Does not affect the original image'''
    kernel = np.ones((amount, amount), np.float32) / (amount**2)
    return cv2.filter2D(image, -1, kernel)

应该连接所有的小间隙,你可以用它进行轮廓检测。

如果您希望将这些轮廓转换为多边形,则可以将这些轮廓近似为多边形。一个很棒的教程,代码是here

检测多边形背后的基本思路正在运行

cv2.findContours(image, cv2.RETR_EXTERNAL,
    cv2.CHAIN_APPROX_SIMPLE)

告诉OpenCV用直线近似轮廓,创建多边形。 (我不确定cv2.RETR_EXTERNAL参数目前是做什么的。)