• python 利用opencv去除图片水印


    python 去除水印“人工”智能去除水印

      这两天公司来了一个新的需求——去除水印,对于我一个从未接触过的这种事情的人来说,当时我是蒙的。不过首先我就去搜索了一下是否有该种合适的功能模块,经过我的筛选,发现opencv应该是最有满足我这个需求可能的模块了。

    我先把我的测试例子放上来。

    测试图片(你可能在别处看到过,没错就是你看到过的那个例子图)

    第一种方法:

      该方法看着是不是很简单?没错就这么几行代码,但是这种方式需要一个美工,让他配合你做一张di.png

    di.png

    # 方式一
    import cv2
    
    def get_water():
        # 黑底白字
        src = cv2.imread('yuan.png')  # 默认的彩色图(IMREAD_COLOR)方式读入原始图像
        # black.jpg
        mask = cv2.imread('di.png', cv2.IMREAD_GRAYSCALE)  # 灰度图(IMREAD_GRAYSCALE)方式读入水印蒙版图像
        # 参数:目标修复图像; 蒙版图(定位修复区域); 选取邻域半径; 修复算法(包括INPAINT_TELEA/INPAINT_NS, 前者算法效果较好)
        dst = cv2.inpaint(src, mask, 3, cv2.INPAINT_NS)
    
        cv2.imwrite('result1.jpg', dst)
    
    get_water()
    

       看完上面这么多废话,其实你就想看看效果如何,那么来看一下该方式效果图

      是不是想说效果很差,其实在我所测试使用的方法中,这种方法已经算是效果不错的了。别着急走,下面还有一种比这效果更好的方式

    第二种方式:

      还是以上一张图片为例,这种方式还是需要美工配合,只是图片变了,同时换了一种算法模式,但是注意该方法效率不高,使用该图片时

    跑一次代码就行了,但是若是别的图片,你可能需要跑几遍代码之后,才能出现最终效果(若你发现采用该方式去除水印,发现去除后的效果,

    只是水印颜色变淡了,那么请你在对处理过的图,再次执行该代码,如此多次之后,请用肉眼识别最好的效果)

    di2.png

    # 方式二
    import cv2
    import numpy
    def get_water2():
    
        src = cv2.imread('yuan.png')
        mask = cv2.imread('di2.png')
        save = numpy.zeros(src.shape, numpy.uint8)  # 创建一张空图像用于保存
    
        for row in range(src.shape[0]):
            for col in range(src.shape[1]):
                for channel in range(src.shape[2]):
                    if mask[row, col, channel] == 0:
                        val = 0
                    else:
                        reverse_val = 255 - src[row, col, channel]
                        val = 255 - reverse_val * 256 / mask[row, col, channel]
                        if val < 0: val = 0
    
                    save[row, col, channel] = val
    
        cv2.imwrite('result2.jpg', save)
    
    get_water2()
    

      不多说直接,上效果图

      这两种方式,是相对来说效果很好的去除水印方式,也就是”人工”去除水印,但是该两种方式并不能满足我的要求,我需要大批量,高效率的去除水印,等我下一篇文章再来分享吧(容我在研究研究,哈哈)

  • 相关阅读:
    JVM内存区域与内存溢出异常
    蓄水池抽样算法应用
    InnoDB引擎的索引和存储结构
    ASP.NET Core Web API 集成测试中使用 Bearer Token
    ASP.NET Core Web API 集成测试
    测试 ASP.NET Core API Controller
    使用 coverlet 查看.NET Core应用的测试覆盖率
    使用 Moq 测试.NET Core 应用 -- 其它
    使用 Moq 测试.NET Core 应用 -- Mock 行为
    使用 Moq 测试.NET Core 应用 -- Mock 属性
  • 原文地址:https://www.cnblogs.com/yaoxiaofeng/p/11188557.html
Copyright © 2020-2023  润新知