【问题标题】:How to remove background noise while performing OpenCV Image subtraction?如何在执行 OpenCV 图像减法时去除背景噪音?
【发布时间】:2018-12-06 11:56:12
【问题描述】:

我有两张图片,一张是文档图片,另一张是模板图片。

我正在文档图像和模板图像之间执行 OpenCV 图像减法。

from matplotlib import pyplot as plt
import numpy as np
import cv2
template_img = cv2.imread('data_3/template.png')
document_img = cv2.imread('data_3/document.png')
result_img = cv2.subtract(template_img,document_img)
plt.imshow(result_img)
plt.title('Result Image')
plt.show()

上述程序的输出:

这里的背景噪音是 Apt.no。 OpenCV 图像减法表现不佳。

有一件事我注意到为什么图像减法效果不佳,因为两张图像的质量不一样。有什么办法可以去除图像减法过程中出现的背景噪音?

【问题讨论】:

  • 使用cv2.morphologyExcv2.MORPH_OPEN
  • @zindarod 我正在使用 cv2.morphologyEx(result_img, cv2.MORPH_OPEN, kernel) 并且整个图像看起来是黑色的。

标签: python opencv image-processing


【解决方案1】:

代码一目了然。

import numpy as np
import cv2

if __name__ == '__main__':

    image = cv2.imread('image.png',cv2.IMREAD_GRAYSCALE)
    template = cv2.imread('template.png',cv2.IMREAD_GRAYSCALE)

    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
    template = cv2.morphologyEx(template, cv2.MORPH_ERODE, kernel,iterations = 2)

    image[template == 0] = 255

    cv2.imshow('image', image)
    cv2.imshow('tmpl', template)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

【讨论】:

  • 上述解决方案不适用于以下文档图像(i.imgur.com/vMKhd9f.png)和模板图像(i.imgur.com/J5IOD9M.png)。所需的输出(i.imgur.com/DhmXHgd.png)和您提供的代码的输出(i.imgur.com/GwMAaJz.png
  • @DineshSonachalam 上述方法不适用于此用法。我已经发布了对您最初问题的答案。
  • 我在你代码的最后一行做了图像减法 cv2.subtract(template,image)。它运作良好。这是我的输出(i.imgur.com/ZkrO3zd.png)。感谢您的贡献。
  • @DineshSonachalam 它之所以有效,是因为您的查询图像具有模板图像的精确比例和方向。如果查询图像稍微放大/缩小或旋转,则它将不起作用。总是试图找到一个通用的解决方案。
猜你喜欢
  • 2018-07-15
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
相关资源
最近更新 更多