
在抽屉深处,总有几张泛黄的老照片:可能是爷爷年轻时的军装照,可能是父母的结婚照,也可能是你小时候的周岁留影。这些照片承载着最珍贵的情感,但岁月总会留下痕迹------划痕、褪色、折痕、甚至边角缺失,让回忆变得模糊。
老照片修复,正是用计算机视觉技术"抚平"岁月痕迹的过程。作为入门者,不用一开始就钻研复杂的深度学习模型,只需掌握核心问题、简单工具和基础代码,就能让老照片"重获新生"。本文从场景、技术、实践三个维度,带你入门老照片修复。
一、先搞懂:老照片常见的"损坏问题"
修复前,得先知道老照片通常会遇到哪些问题------不同问题对应不同的修复思路,对症下药才能事半功倍。
| 损坏类型 | 表现形式 | 修复核心目标 | 
|---|---|---|
| 划痕/噪点 | 黑白或彩色的细线(如灰尘划痕)、随机噪点 | 去除瑕疵,同时保留照片细节(如发丝) | 
| 褪色/偏色 | 整体颜色暗淡(如黑白照泛黄)、局部偏色(如人脸发青) | 恢复色彩平衡,提升对比度 | 
| 折痕/撕裂 | 贯穿画面的深色折痕、边缘撕裂导致的像素缺失 | 填补缺失像素,让折痕处过渡自然 | 
| 大面积缺失 | 照片边角丢失、局部内容损坏(如人脸部分缺失) | 基于上下文推理,生成合理的缺失内容 | 
比如一张1980年的家庭合影,可能同时存在"泛黄(褪色)+ 小划痕(灰尘)",这时候优先处理褪色,再修复划痕,效果会更好。
二、入门级修复技术:从"傻瓜工具"到"基础代码"
老照片修复技术分两类:传统图像处理(适合简单问题) 和 深度学习(适合复杂问题)。入门阶段,我们先从"能快速出效果"的方法入手,不用纠结底层原理。
2.1 零代码入门:用工具搞定80%的简单修复
如果不想写代码,市面上很多工具能解决大部分基础问题,操作简单,效果直观。推荐3个入门级工具,覆盖不同需求:
(1)Photoshop(适合精细修复小瑕疵)
PS是老照片修复的"经典工具",基础功能足够应对划痕、褪色:
- 去划痕/噪点:打开照片 → 滤镜 → 降噪 → 减少杂色(调整"强度",避免细节模糊);或用"修补工具"(圈选划痕,拖到附近相似区域,PS自动匹配纹理)。
- 修复褪色:图像 → 调整 → 色相/饱和度(增加"饱和度"改善泛黄);或用"曲线"(拉高暗部,提升整体亮度)。
- 处理折痕:用"仿制图章工具"(按住Alt取样附近正常区域,再涂抹折痕处,注意力度均匀)。
(2)在线工具(适合快速修复,无需安装)
如果没有PS,在线工具更轻便,推荐2个免费/低成本选项:
- 美图秀秀网页版(老照片修复):上传照片后,直接点击"老照片修复"模块,自动处理褪色、划痕,支持手动调整强度(适合新手)。
- Let's Enhance(侧重画质提升) :除了修复瑕疵,还能提升老照片的分辨率(比如把模糊的人脸变清晰),免费额度足够处理少量照片(官网链接)。
(3)手机APP(适合随时随地修复)
如果照片在手机里,用APP更方便:
- 醒图("老照片修复"功能):自动识别划痕和褪色,支持手动优化细节(如调整人脸清晰度)。
- Snapseed(专业级免费APP):用"修复"工具去划痕,"调整图片"模块改善色彩,适合有一定基础的用户。
2.2 代码入门:用Python+OpenCV修复小瑕疵
如果想尝试技术实现,用OpenCV(轻量级计算机视觉库)写几行代码,就能处理划痕、褪色等基础问题。下面以"修复泛黄+去划痕"为例,给出完整可运行的代码。
步骤1:环境准备
先安装必要的库(只需1行命令):
            
            
              bash
              
              
            
          
          pip install opencv-python numpy matplotlib步骤2:代码实现(修复泛黄+去划痕)
            
            
              python
              
              
            
          
          import cv2
import numpy as np
import matplotlib.pyplot as plt
# 1. 读取老照片(注意:OpenCV默认读取为BGR格式,需转RGB)
old_photo = cv2.imread("old_photo.jpg")  # 替换为你的老照片路径
old_photo_rgb = cv2.cvtColor(old_photo, cv2.COLOR_BGR2RGB)
# 2. 修复"泛黄"(核心:调整色彩平衡,减少黄色分量)
# 方法:将RGB转为YCrCb格式,调整Cr通道(红色分量)和Cb通道(蓝色分量)
ycrcb = cv2.cvtColor(old_photo, cv2.COLOR_BGR2YCrCb)
y, cr, cb = cv2.split(ycrcb)
# 减少黄色:增加Cr(红色)、增加Cb(蓝色),抵消黄色
cr = cv2.add(cr, 15)  # 红色分量+15(可根据泛黄程度调整,范围5-20)
cb = cv2.add(cb, 10)  # 蓝色分量+10(可调整)
# 合并通道,转回RGB
ycrcb_fixed = cv2.merge((y, cr, cb))
color_fixed = cv2.cvtColor(ycrcb_fixed, cv2.COLOR_BGR2RGB)
# 3. 修复"小划痕"(核心:用双边滤波去噪,再用Inpainting补划痕)
# 3.1 先做双边滤波:平滑图像但保留细节(比高斯滤波更适合老照片)
blurred = cv2.bilateralFilter(color_fixed, d=9, sigmaColor=75, sigmaSpace=75)
# 3.2 手动创建划痕Mask(黑色=待修复区域,白色=正常区域)
# 实际场景中可通过边缘检测自动生成Mask,这里简化为手动画一条划痕
mask = np.ones_like(blurred[:, :, 0]) * 255  # 初始全白(正常区域)
cv2.line(mask, (50, 100), (300, 200), 0, 3)  # 画一条黑色划痕(坐标可根据照片调整)
# 3.3 用Inpainting修复划痕
# inpaintRadius:修复半径,值越大覆盖范围越广(建议5-10)
inpaint_result = cv2.inpaint(blurred, mask, inpaintRadius=7, flags=cv2.INPAINT_TELEA)
# 4. 显示对比结果
plt.figure(figsize=(16, 5))
# 原图
plt.subplot(1, 4, 1)
plt.imshow(old_photo_rgb)
plt.title("原图(泛黄+划痕)")
plt.axis("off")
# 色彩修复后
plt.subplot(1, 4, 2)
plt.imshow(color_fixed)
plt.title("步骤1:修复泛黄")
plt.axis("off")
# Mask(划痕区域)
plt.subplot(1, 4, 3)
plt.imshow(mask, cmap="gray")
plt.title("步骤2:划痕Mask")
plt.axis("off")
# 最终修复结果
plt.subplot(1, 4, 4)
plt.imshow(inpaint_result)
plt.title("最终结果(去划痕)")
plt.axis("off")
plt.show()
# 保存结果
cv2.imwrite("fixed_photo.jpg", cv2.cvtColor(inpaint_result, cv2.COLOR_RGB2BGR))
print("修复完成,结果已保存为 fixed_photo.jpg")代码说明:
- 泛黄修复:通过调整YCrCb通道的红色和蓝色分量,抵消黄色(老照片泛黄本质是蓝色分量流失);
- 划痕修复:用cv2.inpaint函数,根据划痕周围的正常像素"推断"并填充划痕区域;
- 参数调整:如果泛黄仍明显,可增大cr和cb的增量;如果划痕没修复干净,可增大inpaintRadius。
三、进阶:复杂老照片修复(深度学习助力)
如果遇到大面积缺失(如照片边角丢失)、人脸模糊、严重折痕等传统方法搞不定的问题,就需要用到深度学习技术。入门者不用自己训练模型(耗时且需要大量数据),直接用开源的预训练模型即可。
3.1 推荐2个入门级开源项目
这些项目都有详细的文档和测试脚本,跟着步骤就能跑通:
(1)LaMa:适合大面积缺失修复
- 功能:能修复老照片中的大面积划痕、缺失区域,甚至去除水印;
- 优势:效果好、速度快,支持自定义Mask;
- 使用步骤 :
- 
克隆仓库: git clone https://github.com/advimman/lama.git;
- 
下载预训练权重(仓库README中有百度云/Google Drive链接); 
- 
运行测试命令(替换图片和Mask路径): bashpython bin/predict.py \ model.path=big-lama \ input_image=old_photo_missing.jpg \ mask=mask_missing.png \ output_dir=results
- 
在 results文件夹中查看修复结果。
 
- 
(2)Face-RESTORE:专注老照片人脸修复
- 功能:针对老照片中模糊的人脸,修复五官细节、去除皱纹和模糊;
- 优势:专门优化人脸场景,比通用模型效果更自然;
- 使用方式 :直接下载预编译的Windows客户端(GitHub链接),无需代码,上传照片即可修复。
3.2 数据集推荐(想深入学习的同学)
如果想自己训练模型,推荐几个常用的老照片修复数据集:
- Old Photo Restoration Dataset:包含大量真实老照片和对应的修复结果;
- CelebA-HQ(人脸子集):可用于人脸修复模型的训练;
- DIV2K:高分辨率图像数据集,适合训练画质提升模块。
四、老照片修复的"避坑指南"
- 先备份原图:修复前一定要保存原图副本,避免操作失误导致不可逆损失;
- 不要过度修复:过度提升对比度或锐度,会导致照片失真(比如人脸变成"塑料感");
- 优先手动标记Mask:自动生成的Mask可能误判正常区域(如把发丝当成划痕),复杂场景下手动调整Mask效果更好;
- 结合人工微调:工具和代码的修复结果不是终点,比如人脸修复后,可手动调整肤色,让效果更自然。
五、总结
老照片修复不是"冷冰冰"的技术,而是用代码和工具"唤醒回忆"的过程。作为入门者,你不需要一开始就掌握深度学习的复杂模型:
- 简单问题(小划痕、轻微泛黄):用Photoshop、醒图或OpenCV的基础代码就能解决;
- 复杂问题(大面积缺失、人脸模糊):用LaMa、Face-RESTORE等开源工具,站在"巨人的肩膀"上快速出效果;
- 进阶方向:如果想深入,再学习图像分割(用于生成精准Mask)、GAN模型(用于生成真实细节)等技术。
不妨从家里最有意义的一张老照片开始,试着用本文的方法修复它------当看到模糊的笑脸重新清晰,你会感受到技术的温度。