【问题标题】:How To Sharpen an image in OpenCV如何在 OpenCV 中锐化图像
【发布时间】:2013-11-22 07:01:23
【问题描述】:

基本的 Google 搜索会找到 this SO question,这似乎是一个很好的答案。但是,当我尝试时,它对锐化模糊的图像完全没有影响。

如果我做错了什么,有人可以澄清一下吗?

到目前为止,我所做的是在图像上实现 filter2D 函数以消除随机噪声,它还模糊了我的周期性噪声,这非常好。现在我已经模糊了噪点,我想锐化图像以查看比原始图像噪点少的图像。这是我的代码:-

   anchor = Point( -1, -1 );
   delta = 0;
   ddepth = -1;
   dst = frame;
   dst2 = image;

  filter2D(src, dst, ddepth , kernel, anchor, delta, BORDER_DEFAULT );

  cv::GaussianBlur(frame, image, cv::Size(0, 0), 11);
  cv::addWeighted(frame, 1.5, image, -0.5, 0, image);

gaussianblur 和 addWeighted 对图像产生 NO 差异。另外,澄清一下,根本没有代码错误。

【问题讨论】:

  • 可能问题出在其他代码中,您覆盖更改,因为部分 cv::GaussianBlur(frame, image, cv::Size(0, 0), 11); cv::addWeighted(frame, 1.5, image, -0.5, 0, image);作品。或者您的图像非常模糊,以至于您看不到差异。

标签: c++ image opencv


【解决方案1】:

为了使其适用于正确的图像,您可以查看以下两种方法。 我使用 OpenCV 3.0.0 进行了编码:

import cv2

x = 'Columbia river.jpg'
img = cv2.imread(x, 1)
cv2.imshow("Original",img)

#---Approach 1---
#---Sharpening filter----
kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
im = cv2.filter2D(img, -1, kernel)
cv2.imshow("Sharpening",im)

#---Approach 2---
aw = cv2.addWeighted(img, 4, cv2.blur(img, (30, 30)), -4, 128)
cv2.imshow("Add_weighted", aw)

【讨论】:

  • 谢谢你。你能解释一下锐化过滤器是如何工作的吗,我对矩阵数学感到困惑。
  • @deweydb 请看this link
  • 谢谢你,这是一个很好的可视化,帮助我理解了它是如何工作的!
【解决方案2】:

对于未来的读者,代码确实有效只是我的图像太模糊了,上面的代码没有可见的效果!

【讨论】:

    【解决方案3】:

    我认为你应该对 fft 反卷积感兴趣:http://web.archive.org/web/20160420171504/http://www.nist.gov/lispix/imlab/FFT/deblur.html

    但是如果你知道模糊内核,这个算法很有用。如果没有,那么你应该谷歌盲反卷积算法。

    【讨论】:

    猜你喜欢
    • 2011-06-26
    • 2023-03-06
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 2011-04-09
    相关资源
    最近更新 更多