Python OpenCV实现图片去水印与噪声修复

叶初
叶初
发布时间:2026-10-14 | 3人浏览过
原创

本文介绍利用Python和OpenCV框架实现图片去水印及噪声修复的方法。通过cv2.inRange进行二值化标定噪声区域,使用dilate扩展特征范围,最后调用inpaint算法基于周围颜色推理并修复图像。文章包含完整代码示例,适用于旧照片修复及去除讨厌水印等场景。

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作为参数传入,算法会据此推理并修复图片。

完整代码

完整Python代码示例


#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 相关产品和应用

全部下载

专题列表