【问题标题】:How to refine image with rough horizontal lines using OpenCV?如何使用 OpenCV 用粗略的水平线细化图像?
【发布时间】:2019-05-22 16:17:48
【问题描述】:

我有这种带有粗糙水平线的图像,我想将其删除或至少使这些线不可见。

使用高斯模糊等平滑技术,我无法获得令人满意的结果,因为线条仍然可见,它只会降低图像的分辨率。

cv::GaussianBlur(image, result, cv::Size(5, 5), 3);

还有其他更适合我的问题的方法吗?谢谢

【问题讨论】:

  • 我们谈论水平线还是对角线?如果对角线很薄,它们可能会在中值滤波后消失。水平线:你必须模糊更多,也许只是在垂直方向。
  • @generic_opto_guy 水平线,我将编辑我的问题,谢谢。如何只在垂直方向上模糊?
  • @gameon67 您可以修改内核大小,例如使用cv::GaussianBlur(image, result, cv::Size(1, 15), 0)。这里,x方向的模糊被省​​略,y方向的模糊增加。我想,这就是其他评论员想要建议的。
  • 使用水平边缘检测器并将图像除以边缘图像。这会削弱图像的水平线。 (您可以将一个常数值乘以结果图像以使其更好)。

标签: c++ opencv image-processing


【解决方案1】:

正如@gameon67 建议的那样,您可以使用 1x15 的内核大小来增加 y 方向的模糊并忽略 x 方向。但是,我觉得对于这种情况,平均滤波比高斯滤波更适合。你可以在官方documentation了解更多。

img = cv2.blur(img,(1, 15)) # average filtering

img = cv2.GaussianBlur(img, (1, 15), 0) # Gaussian filtering

【讨论】:

  • 我试过了,平均模糊更适合这种情况。谢谢!
猜你喜欢
  • 2012-10-12
  • 2017-05-14
  • 1970-01-01
  • 2013-07-28
  • 2017-02-06
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
相关资源
最近更新 更多