【问题标题】:How to convert from edges to contours in OpenCV如何在 OpenCV 中将边缘转换为轮廓
【发布时间】:2018-04-01 22:13:12
【问题描述】:

边缘检测后我得到了这样的图像:

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

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

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

【问题讨论】:

    标签: python opencv edge-detection opencv-contour


    【解决方案1】:

    您需要先检测线条,然后构建轮廓。您可以使用HoughLines() 做到这一点。有一个short tutorial here

    【讨论】:

    • 有什么办法不让线条一直穿过图像?
    • 你可以找到线的交点,然后画线段。
    • 这仍然会给我一些原始图像中没有的多边形。
    • 有一个简单的解决方案。
    • 什么是简单的解决方案?
    【解决方案2】:

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

    如果边缘靠得很近,则可以使用类似的东西进行简单的模糊

    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 参数是做什么的。)

    【讨论】:

      猜你喜欢
      • 2013-03-23
      • 2015-09-26
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多