python+OpenC不仅能用来为图片添加水印logo,还能用来去除图片的水印。从理论上来说,除非原图中水印所在区域为纯色或有规律的图案,否则无法真正去掉水印,因为加水印的过程是不可逆的,我们无法准确判断水印遮盖区域的像素点颜色,因此无法将图像完全恢复成之前的样子。通常的做法是识别出水印的轮廓,使用膨胀算法覆盖水印。

上篇文章我们介绍了python+OpenC为图片添加水印logo的方法(实现效果如上图),本文就来讨论如何去掉上图中的水印。我们首先要手动取得水印所在区域ROI(感兴趣区域),并为水印创建蒙层(mask),然后借助蒙层对图片进行修补以消除水印。

提取ROI:我们在画图中打开图片,放大之后将鼠标停留在图片中某一位置即可在左下角查看到具体的坐标。使用切片roi = img[918:999, 455,679]提取ROI,需要注意的是图片坐标与二维数组位置是相反的,图片坐标(x, y)中x表示像素点到图片左侧的距离,y表示像素点到图片顶部的距离,而二维数组位置(x, y)中x表示该像素点所在行数,y表示该像素点所在列数,两者虽然都是两个数字,但顺序正好相反。

为水印创建蒙层:通过对水印logo的观察可以发现,该水印由红蓝两种颜色构成,因此我们需要对两种颜色分别处理。为了精确处理蓝色,我们可以先将ROI的颜色格式由BGR转换为HS,然后调用inRange( )函数对ROI进行二值化处理,将蓝色区域变成白色,将其它区域变成黑色,这样就创建好了蓝色的蒙层(mask)。关于inRange函数和HS请读者自行百度,本文不做详细介绍。

图片修补:将水印区域放大之后发现在水印的边缘有很多锯齿噪点,这些噪点与水印的颜色相差较大,很影响去除水印的效果。为了消除这些边缘噪点需要调用dilate( )函数对水印蒙层进行膨胀操作,膨胀是数学形态学的基本操作之一,会使蒙层适当扩大“淹没”边缘可能存在的噪点;接下来就是利用膨胀后的蒙层对ROI进行修补,用到的函数是inPaint( );最后一步把修补之后的水印区域回填到原图中,完整代码如下图:

因为原图中水印有两种颜色,我们需要先后对水印中的蓝色和红色部分进行处理。需要提醒的是:HS格式也是由三个数字表示,H的取值范围是0-180,S和的取值范围是0-255,不同颜色对应的HS的取值范围也是不同的,读者可以从网上。去除水印之后的图片如下所示:

不得不说这个水印消除的很完美,即使将上图放大还几倍也很难发现这是一张去除水印的图片。文中使用的图片素材和完整代码已上传至网盘,请移步我的同名微博获取下载链接。如果你对本文内容感兴趣请点个赞,我将持续更新精彩内容,请保持。

python利用opencv去除图片logo_用python+OpenCV去除图片水印相关推荐

  1. python利用公式计算_从零开始用Python构造决策树(附公式、代码)

    来源:Python中文社区 作者:weapon 本文长度为700字,建议阅读5分钟 本文介绍如何不利用第三方库,仅用python自带的标准库来构造一个决策树. 起步 熵的计算: 根据计算公式: 对应的 ...

  2. python利用微信的方法_用Python玩转微信

    Python玩转微信 大家每天都在用微信,有没有想过用python来控制我们的微信,不多说,直接上干货!  这个是在 itchat上做的封装  http://itchat.readthedocs.io ...

  3. python利用什么模块_什么是Python的heapq模块?

    我尝试了"heapq"并得出结论,我的期望与我在屏幕上看到的不同.我需要有人解释它是如何工作的以及它在哪里有用. If you need to maintain a sorted ...

  4. Python利用JPype调用Java对象方法【实现在Python中调用JAVA】

    一.JPype简述 1.JPype是什么? JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足. 2.JPype ...

  5. python利用opencv去除图片logo_python 基于opencv去除图片阴影

    一.前言 如果你自己打印过东西,应该有过这种经历.如果用自己拍的图片,在手机上看感觉还是清晰可见,但是一打印出来就是漆黑一片.比如下面这两张图片: 因为左边的图片有大片阴影,所以打印出来的图片不堪入目 ...

  6. AI 质检学习报告——实践篇——第三步:python利用OpenCV打开摄像头截图后实现图片识字

    AI 质检学习报告--实践篇--第一步:python利用OpenCV打开摄像头并截图 AI 质检学习报告--实践篇--第二步:实现图片识字 前边两篇实践已经分别实现了利用OpenCV打开摄像头并截图和 ...

  7. python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)

    python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码 一.前言 今天的低价单孔摄像机(照相机)会给图像带来很多畸变.畸变主要有两 种:径向畸变和切想畸变.如下图所示,用 ...

  8. AI 质检学习报告——实践篇——第一步:python利用OpenCV打开摄像头并截图

    写在前边 想要做一个AI质检的项目,一点一点来,首先:python利用OpenCV打开摄像头并拍照. 效果 设摄像头像素不咋地,实际的产品肯定不会是这个像素,必须安排一个专业的. 实现代码 impor ...

  9. 手写数字图片数据之python读取保存、二值化、灰度化图片+opencv处理图片的方法

    python 读取.保存.二值化.灰度化图片+opencv处理图片的方法 进行手写数字的图片预测的时候碰到了这样的问题. 先说说处理图片有三种方式 一.matplotlib 二.PIL 三.openc ...

  10. python利用pyqt5和opencv打开电脑摄像头并进行拍照

    python利用pyqt5和opencv打开电脑摄像头并进行拍照 效果如下: 代码如下: #!/usr/bin/python # -*- coding: UTF-8 -*- import sys im ...

最新文章

  1. oracle sql判断相等,获取多行相等的人员(Oracle SQL)
  2. 七大科技巨头统治世界?
  3. html 动态创建表格,jquery动态创建表格
  4. C# 控件置于最顶层、最底层、隐藏、显示
  5. mysql 严格模式_MySQL 开启/关闭 严格模式(Strict Mode)
  6. windows下如何解决intellij idea控制台中文乱码
  7. .net 宏定义_C语言基础知识:几种特殊的函数宏封装方式
  8. AddLinkedServer
  9. 手把手教你如何建立自己的Linux系统
  10. splice方法_Array中splice用法
  11. Redis安装及Java客户端的使用浅析(jedis)
  12. 【C++】图书管理系统(含全部源代码)
  13. 基于Verilog的简易计算器
  14. 程序员眼中的中国传统文化-王阳明《传习录》21
  15. 2018.1.23日记
  16. 计算机网络中使用的最多的交换技术是,计算机网络中主要使用的交换技术
  17. 苹果手机android设备可以删除吗,手机系统自带软件怎么卸载?苹果/安卓软件卸载攻略...
  18. 垂死挣扎的 Flash Player 再爆零日漏洞,影响多个平台
  19. NF_Exp4_20164306
  20. jquery在IE下卡死问题解决方法

热门文章

  1. 路由器WIFI密码怎么设置?快速设置,只需1分钟
  2. spring中AutoWired/Quafifier/Primary及相关注解知识
  3. IDEA 2019 修改中文字体
  4. 携程apollo从服务端安装,再到客户端的使用,第一次搭建,看我就对了(一个简单的入门demo)
  5. Use Goldengate Initial Data Load
  6. 每日一课 | python烤地瓜案例
  7. 【Matlab三维路径规划】蚁群算法三维路径规划【含源码 179期】
  8. 阿里云网络和安全配置实验(云计算)
  9. Arduino LED闪烁
  10. moment解读常用操作及语句——subtract、add、calendar