代码之家  ›  专栏  ›  技术社区  ›  Pro Q Rich Lysakowski PhD

如何在OpenCV中从边转换为等高线

  •  1
  • Pro Q Rich Lysakowski PhD  · 技术社区  · 8 年前

    在边缘检测后,我得到了如下图像: edge detection

    我想把边连接成直线多边形。

    我认为这可以通过使用FindCountors和链近似来实现,但这似乎对我来说并不太好。

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

    2 回复  |  直到 8 年前
        1
  •  1
  •   fireant    8 年前

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

        2
  •  1
  •   Pro Q Rich Lysakowski PhD    8 年前

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

    如果边缘靠得太近,简单的模糊

    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\u外部参数此时的作用。)