python 实现图片修复(可用于去水印)
在现实的生活中,我们可能会遇到一些美好的或是珍贵的图片被噪声干扰,比如旧照片的折痕,比如镜头上的灰尘或污渍,更或者是某些我们想为我所用但有讨厌水印,那么有没有一种办法可以消除这些噪声呢?
答案是肯定的,依然是被我们用了无数次的OpenCV这款优秀的框架。
效果预览

图片修复原理
那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的Django框架中URLconf相关的一些技巧整理
这篇文章主要介绍了Python的Django框架中URLconf相关的一些技巧整理,包括视图配置和debug的示例等,需要的朋友可以参考下2015-07-07
Python切换pip源两种方法(解决pip install慢)
这篇文章主要给大家介绍了关于Python切换pip源两种方法(解决pip install慢),我总结的这几种更换pip源的常用方式,希望可以帮助您成功配置国内源,解决安装Python包速度慢的问题,需要的朋友可以参考下2023-11-11
Flask实现的接口响应中存在中文时接口返回为unicode乱码的解决方法
本文给大家分享了新版Flask实现的接口响应中存在中文时接口返回为unicode乱码的解决方法,文中通过代码示例和图文介绍的非常详细,如果有遇到相同问题的朋友,可以参考阅读本文2023-11-11
pytorch中Schedule与warmup_steps的用法说明
这篇文章主要介绍了pytorch中Schedule与warmup_steps的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-05-05


最新评论