【问题标题】:Smoothing 2D contour with rough boundary in numpy array在numpy数组中平滑具有粗糙边界的2D轮廓
【发布时间】:2021-05-10 00:51:48
【问题描述】:

我有一个在 numpy 数组中表示的轮廓,其边界点为 1,其余为 0。示例图像如下所示。我怎样才能平滑这个轮廓?

我正在尝试获得一个比图像中的轮廓更平滑的轮廓

【问题讨论】:

  • 你需要多流畅?
  • 我希望我可以参数化平滑程度

标签: python numpy opencv computer-vision scikit-image


【解决方案1】:

您可以使用active_contour 将具有一定数量点的样条曲线与您的轮廓相匹配。如果您减少点数,您将获得更平滑的轮廓。

【讨论】:

    【解决方案2】:

    您可以使用腐蚀和膨胀等形态变换。 OpenCV 在这里有一个很好的教程:https://docs.opencv.org/master/d9/d61/tutorial_py_morphological_ops.html

    【讨论】:

      【解决方案3】:

      正如@Mad Physicist 所说,您可以使用形态学技术,我建议使用打开(膨胀和腐蚀),然后使用膨胀,如下所示:

      import cv2
      import numpy as np
      
      img = cv2.imread('img.png',0)
      kernel  = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(11,11))
            
      
      opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel,iterations= 5)
      
      opening = cv2.dilate(opening,kernel,iterations = 1)
      
      img_window = np.hstack((img,opening))
      
      cv2.imshow("image",img_window)
      
      cv2.waitKey(0)
      
      cv2.destroyAllWindows()
      

      结果:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-13
        • 2012-08-09
        • 1970-01-01
        • 2012-10-29
        • 2020-02-08
        • 2018-09-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多