python 实现图片修复(可用于去水印)


Posted in Python onNovember 19, 2020

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

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

效果预览

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()

以上就是python 实现图片修复(可用于去水印)的详细内容,更多关于python 图片修复的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python实现发送邮件及附件功能
Mar 02 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
Apr 25 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
Apr 28 Python
在Django中输出matplotlib生成的图片方法
May 24 Python
python中使用 xlwt 操作excel的常见方法与问题
Jan 13 Python
Python 获取 datax 执行结果保存到数据库的方法
Jul 11 Python
Django 导出项目依赖库到 requirements.txt过程解析
Aug 23 Python
python web框架中实现原生分页
Sep 08 Python
Python 实现日志同时输出到屏幕和文件
Feb 19 Python
keras topN显示,自编写代码案例
Jul 03 Python
python dict如何定义
Sep 02 Python
python爬取2021猫眼票房字体加密实例
Feb 19 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 #Python
Python并发爬虫常用实现方法解析
Nov 19 #Python
python实现文件分片上传的接口自动化
Nov 19 #Python
Python类class参数self原理解析
Nov 19 #Python
Python爬虫如何破解JS加密的Cookie
Nov 19 #Python
python制作一个简单的gui 数据库查询界面
Nov 19 #Python
解决python3中os.popen()出错的问题
Nov 19 #Python
You might like
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
php中的登陆login
2007/01/18 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
IE不出现Flash激活框的小发现的js实现方法
2007/09/07 Javascript
地址栏上的一段语句,改变页面的风格。(教程)
2008/04/02 Javascript
传递参数的标准方法(jQuery.ajax)
2008/11/19 Javascript
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
javascript版2048小游戏
2015/03/18 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
javascript 显示全局变量与隐式全局变量的区别
2017/02/09 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
150行代码带你实现微信小程序中的数据侦听
2019/05/17 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
vue 组件简介
2020/07/31 Javascript
Echarts在Taro微信小程序开发中的踩坑记录
2020/11/09 Javascript
JavaScript实现浏览器网页自动滚动并点击的示例代码
2020/12/05 Javascript
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
python将秒数转化为时间格式的实例
2018/09/16 Python
Python中fnmatch模块的使用详情
2018/11/30 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
pytorch标签转onehot形式实例
2020/01/02 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
经典c++面试题六
2012/01/18 面试题
西部世纪面试题
2014/12/05 面试题
《老王》教学反思
2014/02/23 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python