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中常用的各种数据库操作模块和连接实例
May 29 Python
Python实现比较两个列表(list)范围
Jun 12 Python
举例详解Python中threading模块的几个常用方法
Jun 18 Python
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
Python 递归函数详解及实例
Dec 27 Python
Django框架使用mysql视图操作示例
May 15 Python
python3.7简单的爬虫实例详解
Jul 08 Python
python实现引用其他路径包里面的模块
Mar 09 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
Mar 31 Python
Django 解决开发自定义抛出异常的问题
May 21 Python
python Scrapy爬虫框架的使用
Jan 21 Python
python中 Flask Web 表单的使用方法
May 20 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
php方法调用模式与函数调用模式简例
2011/09/20 PHP
thinkPHP5.0框架安装教程
2017/03/25 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
2019/09/26 PHP
jQuery toggle()设置CSS样式
2009/11/05 Javascript
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
2014/06/09 Javascript
AngularJS入门教程(二):AngularJS模板
2014/12/06 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
JS实现“隐藏与显示”功能(多种方法)
2016/11/24 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
简单的Vue异步组件实例Demo
2017/12/27 Javascript
微信小程序自定义导航栏
2018/12/31 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
Python实现树莓派WiFi断线自动重连的实例代码
2017/03/16 Python
flask session组件的使用示例
2018/12/25 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
python实现获取单向链表倒数第k个结点的值示例
2019/10/24 Python
python常见字符串处理函数与用法汇总
2019/10/30 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
python中plt.imshow与cv2.imshow显示颜色问题
2020/07/16 Python
使用Python实现音频双通道分离
2020/12/25 Python
详解如何通过H5(浏览器/WebView/其他)唤起本地app
2017/12/11 HTML / CSS
财务会计实训报告
2014/11/05 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL
win7配置本地ftp服务器的图文教程
2022/08/05 Servers