opencv 将云2D图像填充到连续Map中

zpqajqem  于 2023-03-13  发布在  其他
关注(0)|答案(2)|浏览(166)

我有下面的图像:

我希望得到接近(我做得不完美):

我怎么用python来做呢?我的初始图像是一个0和255值的2D numpy数组。

ubof19bj

ubof19bj1#

你可以试试这个:

  1. import cv2
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. img = cv2.imread('img.png', 0)
  5. img[img > 0] = 255
  6. kernel = np.ones((2, 2), np.uint8)
  7. dilation = cv2.dilate(img, kernel, iterations=25)
  8. plt.imshow(dilation, cmap="gray")

它给出:

可以通过更改核和迭代次数来调整结果。

展开查看全部
zed5wv10

zed5wv102#

下面是在Python/OpenCV中实现这一点的一种方法。

  • 将输入读取为灰度
  • 阈值为0
  • 应用形态学扩张连接,然后关闭以填充微小间隙
  • 保存结果

输入:

  1. import cv2
  2. import numpy as np
  3. # read the input as grayscale
  4. img = cv2.imread('2D_cloud.png', cv2.IMREAD_GRAYSCALE)
  5. # thresh at 0
  6. thresh = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY)[1]
  7. # apply morphology dilate and close
  8. kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (15,15))
  9. dilate = cv2.morphologyEx(thresh, cv2.MORPH_DILATE, kernel, iterations=1)
  10. kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9,9))
  11. result = cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, kernel, iterations=1)
  12. # save results
  13. cv2.imwrite('2D_cloud_thresh.jpg', thresh)
  14. cv2.imwrite('2D_cloud_dilate.jpg', dilate)
  15. cv2.imwrite('2D_cloud_result.jpg', result)
  16. # show results
  17. cv2.imshow('thresh', thresh)
  18. cv2.imshow('dilate', dilate)
  19. cv2.imshow('result', result)
  20. cv2.waitKey(0)

阈值:

扩张:

关闭结果:

展开查看全部

相关问题