【问题标题】:Convert Gray background to white background without disturbing the original image在不干扰原始图像的情况下将灰色背景转换为白色背景
【发布时间】:2019-08-20 07:35:59
【问题描述】:

我裁剪了几张背景为灰色的图像,需要将它们转换为白色背景以与参考图像进行比较。

我实现了以下转换代码:

import cv2
im_gray = cv2.imread('gray_bg.png', cv2.IMREAD_GRAYSCALE)
(thresh, im_bw) = cv2.threshold(im_gray, 255, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
cv2.imwrite('white_bg.png', im_bw)

输入:

输出:

预期输出:

如果您观察,我的输出图像在原始图像的边缘有一些噪点(我希望我说的没有错)。因此,在将我的输出与参考图像进行比较时,我没有得到所需的输出。有人可以建议我怎么做吗?

这是我们编写的用于比较两个图像的程序:

SourceImagePath = r'white_bg.png'
TemplateImagePath = r'ex_white_bg.png'
#def IconValidation(self,SourceImagePath,TemplateImagePath):
sourceImg=cv.imread(SourceImagePath)
templateImg=cv.imread(TemplateImagePath)
_,tempwidth,tempheight=templateImg.shape[::-1]
srcheight = np.size(sourceImg, 0)
srcwidth = np.size(sourceImg, 1)
if(srcwidth < tempwidth) and (srcheight < tempheight):
    print("comparison")

resultImg = cv.matchTemplate(sourceImg,templateImg,cv.TM_CCOEFF_NORMED)
matchVal = resultImg[0][0]
threshold=0.95
if(matchVal>threshold):
    print("passed")

else:
    print("failed")

【问题讨论】:

  • 知道如何将输出与预期的输出进行比较会很有用;考虑到这是引发问题的操作。
  • 更新了代码。请看一下
  • 在更新您的问题后,为了更好地满足您的需求,如果您还分享模型图像以及您如何获得它将会很有用,以便其他人可以测试比较是否失败。为了进行比较,我使用了图像像素总和的百分比差异。

标签: python opencv edge-detection image-comparison


【解决方案1】:

您看到的是混叠,而不是噪声。它出现是因为硬阈值。

您输入的图像确实有一点噪点,通过放大可以看到(可能是由于某些阶段的有损压缩),但它没有混叠。

您可以通过应用 1.4 的增益(灰度级约为 180)将灰色背景变为白色,同时保持黑色。这将避免引入别名。

【讨论】:

    【解决方案2】:

    避免颜色编码的变化达到最佳效果。代码如下:

    im_gray = cv2.imread('gray_bg.png', cv2.IMREAD_UNCHANGED)
    b, g, r = cv2.split(im_gray)
    
    t = [None] * 3
    u = [None] * 3
    for i, im in enumerate([b, g, r]):
        t[i], u[i] = cv2.threshold(im, 255, 255, cv2.THRESH_BINARY + cv2.THRESH_TRIANGLE)
    
    dst = cv2.merge((*u,))
    cv2.imwrite('white_bg.png', dst)
    

    通过将其与原版进行比较,它得出99.99% 相等。

    如果您真的需要它,您可以使用cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) 将图像转换为灰度编码。

    结果与通缉:

    【讨论】:

    • 这个根本解决不了问题,是二值化造成的。
    • 亲爱的@YvesDaoust 感谢您的考虑。如果您已仔细阅读该问题,您将看到“因此,在将我的输出与参考图像进行比较时,我没有得到所需的输出。”在我所做的所有测试中,我给出的代码示例是给出最佳等式比较结果的那个。我没有像你那样处理噪音问题,但至少我已经给出了一些工作代码。
    • 你不明白。您没有避免混叠,并且您的输出与 OP 获得的相同。放大图像无插值查看。
    猜你喜欢
    • 2019-04-26
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 2013-11-27
    • 1970-01-01
    相关资源
    最近更新 更多