如何在OpenCV中对图像进行锐化处理

6
一个基本的谷歌搜索可以找到这个SO问题和一个看起来非常好的答案。然而,当我尝试时,它对于锐化我的模糊图像没有任何影响。
请问有人能够澄清一下是否我做错了什么?
到目前为止,我实现了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);

高斯模糊和addWeighted对图像没有任何影响。另外,需要澄清的是,代码中也没有任何错误。

1
也许问题出在其他代码片段,您在那里覆盖了更改,因为以下部分可以正常工作: cv::GaussianBlur(frame, image, cv::Size(0, 0), 11); cv::addWeighted(frame, 1.5, image, -0.5, 0, image); 或者您的图像已经模糊到无法看到区别。 - old-ufo
2个回答

19

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

为了让它适合正常的图片,你可以采用以下两种方法。我使用了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
4
请看这个链接:https://setosa.io/ev/image-kernels/ - Jeru Luke
谢谢,这是一个很棒的可视化工具,帮助我更好地理解了它的工作原理! - deweydb

5

对于未来的读者,这段代码是可行的,只是我的图片太模糊了,所以上面的代码没有明显的效果!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接