zoukankan      html  css  js  c++  java
  • python利用opencv去除水印方法

    OpenCV(Open Source Computer Vision Library)是一个跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法

    在python中可以利用opencv来去除水印

    opencv安装

    window10

    OpenCV 3:http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv

    Numpy:http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

    将下载好的whl文件放置到一个方便的目录,打开cmd,安装

    pip install xxx

    测试

    import cv2

    没有报错则说明成功

    参考自https://www.ywlib.com/archives/39.html

    下面开始去除水印, 使用58图片做测试

    基于OpenCV的两种去水印方案

    1. 基于 inpaint 方法(网上的方法,处理质量较低)

    • 算法理论:基于Telea在2004年提出的基于快速行进的修复算法(FMM算法),先处理待修复区域边缘上的像素点,然后层层向内推进,直到修复完所有的像素点
    • 处理方式:由ui人员制作出黑底白色水印且相同位置的水印蒙版图(必须单通道灰度图),然后使用inpaint方法处理原始图像,具体使用时可把水印区放粗,这样处理效果会好点

    需要带水印的图,和该图一样大小的的黑底白色水印且位置相同的水印图

        test_dir = 'xxx'
        mask_dir = 'xxx'
        save_dir ='xxx'
        src = cv2.imread(rental_dir)
        mask = cv2.imread(wm_dir, cv2.IMREAD_GRAYSCALE)
        dst = cv2.inpaint(src, mask, 3, cv2.INPAINT_TELEA)
        cv2.imwrite(save_dir, dst)

    2. 基于像素的反色中和(处理质量较高)

    参考自ps去水印原理,通过一张白底的反色水印图来中和原图水印

     需要到水印的图,和该图一样大小的白底棕色(128,128,128)的水印且位置相同的水印图,128的效果比较好

        test_dir = 'xxx'
        mask_dir = 'xxx'
        save_dir ='xxx'
        src = cv2.imread(test_dir)
        mask = cv2.imread(mask_dir)
        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(save_dir, save)

    第二种方面明显比第一种要好,但是水印的边角处理不好,可以先用二在用一,效果会更好

    参考自https://my.oschina.net/u/2400083/blog/732321

  • 相关阅读:
    System.currentTimeMillis();
    java中synchronized使用方法
    距离矢量路由协议举例——RIP
    Bulk Insert命令具体
    美国地名大全(美国城市名称英文、中文)
    面试准备系列01----面试中的链表题目汇总
    Introspector(内省)简单演示样例 与 简单应用
    Android APK反编译具体解释(附图)
    MATLAB新手教程
    Nginx+Tomcat7+Mencached负载均衡集群部署笔记
  • 原文地址:https://www.cnblogs.com/lgh344902118/p/7928054.html
Copyright © 2011-2022 走看看