基于python的图片修复程序(实现水印去除)


Posted in Python onJune 04, 2018

图片修复程序-可用于水印去除

在现实的生活中,我们可能会遇到一些美好的或是珍贵的图片被噪声干扰,比如旧照片的折痕,比如镜头上的灰尘或污渍,更或者是某些我们想为我所用但有讨厌水印,那么有没有一种办法可以消除这些噪声呢?

答案是肯定的,依然是被我们用了无数次的OpenCV这款优秀的框架。

OpenCV

目前,OpenCV逐步成为一个通用的基础研究和产品开发平台。OpenCV这一名称包含了Open和 Computer Vision两者的意思。实际上,Open指Open Source(开源,即开放源代码),Computer Vision则指计算机视觉。OpenCV的发展对软件的开发具有重要影响。想要了解更多的话大家可以参考这篇文章:https://3water.com/article/127911.htm

效果预览

基于python的图片修复程序(实现水印去除)

图片修复原理

那OpenCV究竟是怎么实现的,简单的来说就是开发者标定噪声的特征,在使用噪声周围的颜色特征推理出应该修复的图片的颜色,从而实现图片修复的。

程序实现解析

  • 标定噪声的特征,使用cv2.inRange二值化标识噪声对图片进行二值化处理,具体代码:cv2.inRange(img, np.array([240, 240, 240]), np.array([255, 255, 255])),把[240, 240, 240]~[255, 255, 255]以外的颜色处理为0;
  • 使用OpenCV的dilate方法,扩展特征的区域,优化图片处理效果;
  • 使用inpaint方法,把噪声的mask作为参数,推理并修复图片;

完整代码

#coding=utf-8
#图片修复

import cv2
import numpy as np

path = "img/inpaint.png"

img = cv2.imread(path)
hight, width, depth = img.shape[0:3]

#图片二值化处理,把[240, 240, 240]~[255, 255, 255]以外的颜色变成0
thresh = cv2.inRange(img, np.array([240, 240, 240]), np.array([255, 255, 255]))

#创建形状和尺寸的结构元素
kernel = np.ones((3, 3), np.uint8)

#扩张待修复区域
hi_mask = cv2.dilate(thresh, kernel, iterations=1)
specular = cv2.inpaint(img, hi_mask, 5, flags=cv2.INPAINT_TELEA)

cv2.namedWindow("Image", 0)
cv2.resizeWindow("Image", int(width / 2), int(hight / 2))
cv2.imshow("Image", img)

cv2.namedWindow("newImage", 0)
cv2.resizeWindow("newImage", int(width / 2), int(hight / 2))
cv2.imshow("newImage", specular)
cv2.waitKey(0)
cv2.destroyAllWindows()

图片扩展与腐蚀更多资料:http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_morphological_ops/py_morphological_ops.html

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python 时间处理datetime实例
Sep 06 Python
使用 Python 获取 Linux 系统信息的代码
Jul 13 Python
python实现数组插入新元素的方法
May 22 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
Python创建普通菜单示例【基于win32ui模块】
May 09 Python
python3 对list中每个元素进行处理的方法
Jun 29 Python
使用PM2+nginx部署python项目的方法示例
Nov 07 Python
Python构建图像分类识别器的方法
Jan 12 Python
python3 批量获取对应端口服务的实例
Jul 25 Python
Django实现简单网页弹出警告代码
Nov 15 Python
Python Sympy计算梯度、散度和旋度的实例
Dec 06 Python
python实现requests发送/上传多个文件的示例
Jun 04 #Python
python3写的简单本地文件上传服务器实例
Jun 04 #Python
Python装饰器的执行过程实例分析
Jun 04 #Python
使用Python监控文件内容变化代码实例
Jun 04 #Python
Python操作mongodb的9个步骤
Jun 04 #Python
Python中property函数用法实例分析
Jun 04 #Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
Jun 04 #Python
You might like
phpBB BBcode处理的漏洞
2006/10/09 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
2011/11/07 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
2014/06/23 PHP
PHP类的特性实例分析
2016/09/28 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
2017/12/14 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
利用js获取服务器时间的两个简单方法
2010/01/08 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
JS获取input file绝对路径的方法(推荐)
2016/08/02 Javascript
jquery动态赋值id与动态取id方法示例
2017/08/21 jQuery
js实现本地时间同步功能
2017/08/26 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
python 实现删除文件或文件夹实例详解
2016/12/04 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
django1.11.1 models 数据库同步方法
2018/05/30 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
2019/12/27 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
你的自行车健身专家:FaFit24
2016/11/16 全球购物
个人简历自我鉴定
2013/10/11 职场文书
食品安全承诺书
2014/05/22 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
学习优秀共产党员先进事迹思想报告
2014/09/17 职场文书
房地产销售员岗位职责
2015/04/11 职场文书
培训班通知
2015/04/25 职场文书
学生通报表扬范文
2015/05/04 职场文书
Win11如何默认打开软件界面最大化?Win11默认打开软件界面最大化的方法
2022/07/15 数码科技