用OpenCV给老照片修图:中值滤波去除划痕的保姆级教程
翻开泛黄的相册,那些承载着家族记忆的老照片往往布满时间留下的痕迹——细密的划痕、斑驳的污渍,让珍贵影像逐渐模糊。作为数字图像处理爱好者或家史档案整理者,掌握OpenCV的中值滤波技术,就能让这些历史影像重焕新生。不同于传统修图软件的复杂操作,本文将以Python代码实战为核心,手把手教你通过调整核参数精准消除不同类型划痕,同时保留照片原始质感。
1. 老照片修复的核心挑战与解决方案
老照片的损伤通常分为线性划痕和块状污渍两类。前者多由相纸摩擦产生,表现为细长白线;后者常因潮湿导致,呈现不规则深色斑块。传统均值滤波虽然能减弱噪声,但会导致图像边缘模糊化——这正是中值滤波(Median Blur)的用武之地。
中值滤波的独特优势在于:
- 非线性处理:取邻域像素的中值而非平均值,有效过滤突变的孤立噪点
- 边缘保留:不会像线性滤波那样产生梯度扩散现象
- 参数直观:只需调整核大小(kernel size)即可适应不同损伤类型
import cv2
import numpy as np
# 基础处理流程
def load_image(path):
img = cv2.imread(path)
if img is None:
raise ValueError("图像加载失败,请检查路径")
return img
# 显示对比函数
def compare_images(original, processed, title):
combined = np.hstack((original, processed))
cv2.imshow(title, combined)
cv2.waitKey(0)
cv2.destroyAllWindows()


301

被折叠的 条评论
为什么被折叠?



