使用OpenCV和Python从图像中删除黑点

时间:2017-11-16 07:52:14

标签: python opencv

我正在尝试比较两个图像,并且需要预先处理/清理其中一个图像,这是扫描副本,然后再与数字副本进行比较。 Scanned copy / Digital copy

我在扫描的图像上运行了这个代码并得到了一个有很多黑点的输出。不知道如何清理这些,以便我可以与数字副本进行比较

img = cv2.multiply(img, 1.2)
kernel = np.ones((1, 1), np.uint8)
img = cv2.erode(img, kernel, iterations=1)
kernel1 = np.zeros( (9,9), np.float32)
kernel1[4,4] = 2.0
boxFilter = np.ones( (9,9), np.float32) / 81.0
kernel1 = kernel1 - boxFilter
img = cv2.filter2D(img, -1, kernel1)

下面是我得到的输出

Output Image

2 个答案:

答案 0 :(得分:2)

尝试在频域中应用滤镜,FFT后的图像会有规则的亮点,因为你的图像有噪音。如果要删除这些点并进行逆FFT变换,则会从图像中删除点。请查看此示例:example1example2example3

答案 1 :(得分:0)

是。 @Andrey方法是解决问题的正确方法。 我已经尝试去除频域中的高频点,这里是一个如果正确完成它会是什么样子的例子

灰度原始图像。

enter image description here

在图像上运行FFT后

enter image description here

消除所有高频噪音。当然,这是通过在噪声源周围画一个黑色圆圈来手动完成的。您可以设计程序以检测局部亮点并将其清除干净。

enter image description here

这是在上述频率图像的逆FFT之后的最终结果。有些因为我消除噪音的原因而退化了,但它应该让你大致了解它是如何完成的。

enter image description here

只有点周围的区域会受到此过程的影响,所有其他图案都保留其原始形式。