python利用opencv去除水印方法

摘要:
OpenCV(OpenSourceComputerVisionLibrary)是一个跨平台的计算机视觉库,它实现了图像处理和计算机视觉中的许多常见算法。在Python中,opencv可用于删除水印。opencv可用于安装window10OpenCV3:http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencvNumpy:http://www.lfd.uci.edu/ ~

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

免责声明:文章转载自《python利用opencv去除水印方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Delphi2007升级到Delphi 2010总结[Kotlin参考]一、总览-(4)Kotlin原生下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python爬虫入门01:教你在 Chrome 浏览器轻松抓包

通过 python爬虫入门:什么是爬虫,怎么玩爬虫? 我们知道了什么是爬虫 也知道了爬虫的具体流程 那么在我们要对某个网站进行爬取的时候 要对其数据进行分析 就要知道应该怎么请求 就要知道获取的数据是什么样的 所以我们要学会怎么抓咪咪! 哦,不对。 我们要学会怎么数据抓包 虽然小馒头也是包的一种 ok...anyway... 打开我们的 Chrome...

Ansible主机清单Inventory文件hosts

Ansible主机清单Inventory文件hosts 发表于 2017-05-14 | 分类于 运维相关 , Ansible | | 阅读次数 4638| 字数统计 1,442 | 阅读时长预计 6 Ansible 通过读取默认的主机清单配置,可以同时连接到多个远程主机上执行任务组和主机之间的关系通过 inventory 文件配置. 默认的...

Python 网络爬虫 007 (编程) 通过网站地图爬取目标站点的所有网页

通过网站地图爬取目标站点的所有网页 使用的系统:Windows 10 64位Python 语言版本:Python 2.7.10 V 使用的编程 Python 的集成开发环境:PyCharm 2016 04 我使用的 urllib 的版本:urllib2 注意: 我没这里使用的是 Python2 ,而不是Python3 一 . 前言 通过前两节(爬取一个...

(python learn) 5 元组

首先我们要知道,字符串,元组,还有列表等数据类型在python中都属于序列数据类型。对这种数据类型,有一些统一的函数可用,比如: len() 可以返回长度 +可以连接两个序列 *可以重复两个序列中的元素 in可以判断某个元素是否在序列中 max()返回最大元素 min()返回最小元素 cmp()比较两个序列是否相等 下面,我们研究一下元组。 元组是一组被逗...

python获取文件的绝对路径

python获取文件的绝对路径 importos defload_file(): #获取当前文件路径 current_path = os.path.abspath(__file__) #获取当前文件的父目录 father_path = os.path.abspath(os.path.dirname(current_pat...

Python学习————包

一 包介绍 例: pool/ #顶级包 ├── __init__.py ├── futures #子包 │ ├── __init__.py │ ├── process.py │ └── thread.py └── versions.py #子模块 强调: 1. 在python...