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

 更新时间:2020年11月19日 16:52:26   作者:vipstore  
这篇文章主要介绍了python 实现图片修复(可用于去水印),帮助大家更好的理解和使用opencv库,感兴趣的朋友可以了解下

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

答案是肯定的,依然是被我们用了无数次的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中私有属性“_“下划线和“__“双下划线区别

    Python中私有属性“_“下划线和“__“双下划线区别

    本文主要介绍了Python中私有属性“_“下划线和“__“双下划线区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python九九乘法表的七种实现方式详解

    Python九九乘法表的七种实现方式详解

    在Python中,输出九九乘法表是一道非常基础的题目,但对于初学者来说,也是一个很好的练习和巩固基础知识的机会,这篇文章主要给大家介绍了关于Python九九乘法表的七种实现方式,需要的朋友可以参考下
    2023-09-09
  • python中的错误处理

    python中的错误处理

    异常是指程序中的例外,违例情况。异常机制是指程序出现错误后,程序的处理方法。当出现错误后,程序的执行流程发生改变,程序的控制权转移到异常处理。
    2016-04-04
  • Python内置函数locals()的具体示例

    Python内置函数locals()的具体示例

    本文主要介绍了Python中的内置函数locals()的具体用法和应用场景,locals()函数用于获取当前局部符号表的字典,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-09-09
  • Python标准库pathlib操作目录和文件

    Python标准库pathlib操作目录和文件

    这篇文章主要为大家介绍了Python标准库pathlib操作目录和文件的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • Python实现模拟锟斤拷等各类乱码详解

    Python实现模拟锟斤拷等各类乱码详解

    说到乱码问题就不得不提到锟斤拷,这算是非常常见的一种乱码形式,那么它到底是经过何种错误操作产生的呢?本文我们就来一步步探究
    2023-02-02
  • Python定义一个跨越多行的字符串的多种方法小结

    Python定义一个跨越多行的字符串的多种方法小结

    今天小编就为大家分享一篇Python定义一个跨越多行的字符串的多种方法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 教你如何使用Python开发一个钉钉群应答机器人

    教你如何使用Python开发一个钉钉群应答机器人

    在聊天工具大肆侵入我们生活各个方面的今天,各种消息无时无刻不在侵扰我们的每一寸时间,这种情况下,一个聊天的机器人就很有必要了.今天,我们来学习一下使用 Python 开发一个钉钉的应答机器人,助你「人生苦短,少回消息」,需要的朋友可以参考下
    2021-06-06
  • Python编程之变量赋值操作实例分析

    Python编程之变量赋值操作实例分析

    这篇文章主要介绍了Python编程之变量赋值操作,结合实例形式分析了Python赋值、位移、多元赋值操作符等相关操作使用技巧,需要的朋友可以参考下
    2017-07-07
  • python中关于对super()函数疑问解惑

    python中关于对super()函数疑问解惑

    Python中的super()是用于调用父类(或父类的父类...)方法的函数,主要用于多继承,单继承问题不大,下面这篇文章主要给大家介绍了关于python中关于对super()函数疑问解惑的相关资料,需要的朋友可以参考下
    2022-08-08

最新评论