【问题标题】:How to remove shadow from scanned images using OpenCV?如何使用 OpenCV 从扫描图像中去除阴影?
【发布时间】:2017-06-26 01:56:51
【问题描述】:

我想在使用 OpenCV 进行图像二值化之前去除阴影。我已经尝试过 Otsu Method 和自适应阈值,但是对于有大面积阴影的图像,这两种方法都不会产生很好的效果。

有更好的解决方案吗?提前致谢。

]1

]2

【问题讨论】:

    标签: python opencv image-processing


    【解决方案1】:

    由于您没有指定任何语言,我假设 Python 来说明。

    一个不错的起点可能是采用我在this answer 中展示的方法并将其扩展为与多个渠道一起使用。

    类似的东西

    import cv2
    import numpy as np
    
    img = cv2.imread('shadows.png', -1)
    
    rgb_planes = cv2.split(img)
    
    result_planes = []
    result_norm_planes = []
    for plane in rgb_planes:
        dilated_img = cv2.dilate(plane, np.ones((7,7), np.uint8))
        bg_img = cv2.medianBlur(dilated_img, 21)
        diff_img = 255 - cv2.absdiff(plane, bg_img)
        norm_img = cv2.normalize(diff_img,None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)
        result_planes.append(diff_img)
        result_norm_planes.append(norm_img)
    
    result = cv2.merge(result_planes)
    result_norm = cv2.merge(result_norm_planes)
    
    cv2.imwrite('shadows_out.png', result)
    cv2.imwrite('shadows_out_norm.png', result_norm)
    

    未归一化的结果如下:

    以及归一化的结果:

    【讨论】:

    • 我在 ObjectiveC 中编写了完全相同的代码,但此代码不适用于 Color。它转换为黑白。甚至 Logo 正在转变为黑白。但我实际需要显示彩色标志应该是彩色的。只需要删除Shadow Only。如果您提供帮助,将不胜感激。谢谢。
    • @krunal 你应该发布一个新问题,并包括一些导致问题的示例输入以及 ObjectiveC 中的 MCVE。
    • @DanMašek 运气好吗? :\
    • @jtlz2 呃,有什么运气吗?
    • 道歉 - 是为 @krunal... 准备的:/我想知道他们是否能够让它为颜色工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 2012-10-28
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多