前言

      前段时间刷朋友圈,看到有这样一则消息:意思就是老旧照片修复,简单的五块,破旧的十块!我寻思着这也能赚钱?直到我看到这样的一张图片:

我才明白为啥会有人花钱去修复这些照片,在他们眼里别说五块,五十,五百也会去花,那毕竟是很多人最后能留下想念的东西,话说当你老了,难道不想看看年轻时的自己?当然在我们现在手机照片,各种照片都能找到,当时间倒退十五年,那时候就知道照片的珍贵性了!废话不多讲!直接上干货!

需用到的工具

Python3.7.8

自带的一些模块

mmediting模块; 

由于涉及到算法问题,这里就不详细给大家介绍了,不然得五千字论文了!

简单截张图说明一下图像修复,也就是所谓的Image inpainting是在干嘛吧。比如有一张打了马赛克的图片:

用了图像修复算法之后,图像就可以恢复成这样啦:

是不是很神奇,感觉很有趣,很想玩呢~这里我们就教大家如何借助现有的开源代码来实现这一功能。首先,我们去GitHub上搜索一下这些文章,看看有没有人复现过,这里我们采用mmlab那边复现的算法模型!

代码仓库如下:

https://github.com/open-mmlab/mmediting

运行该仓库所需要依赖的环境如下:

​​​​​​​
Linux (Windows is not officially supported)
Python 3.6+
PyTorch 1.3 or higher
CUDA 9.0 or higher
NCCL 2
GCC 4.9 or higher
mmcv

安装该库的命令如下:

python3 setup.py develop

安装完之后,我们还需要下载repo上的模型,例如:

https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_8x2_places_20200619-c00a0e21.pth

下载完之后,我们就可以简单地写个脚本测试一下啦:


'''
Function:图像修复'''
import os
import cv2
import mmcv
import time
import torch
import argparse
import numpy as np
from mmedit.core import tensor2img
from mmedit.apis import init_model, inpainting_inference'''parse args in command lines'''
def parseArgs():parser = argparse.ArgumentParser(description='Inpainting demo')parser.add_argument('--imagepath', dest='imagepath', help='path to input image file.', default='test.jpg', type=str)parser.add_argument('--outputpath', dest='outputpath', help='path to save inpainting result.', default='output.jpg', type=str)args = parser.parse_args()return args'''inpainting image'''
def inpainting(masked_img_path, mask_path, savepath):configpath = 'mmediting/configs/inpainting/deepfillv2/deepfillv2_256x256_8x2_celeba.py'checkpointpath = 'deepfillv2_256x256_8x2_celeba_20200619-c96e5f12.pth'inpainting_model = init_model(configpath, checkpointpath, device=torch.device('cuda', 0))result = inpainting_inference(inpainting_model, masked_img_path, mask_path)result = tensor2img(result, min_max=(-1, 1))[..., ::-1]mmcv.imwrite(result, savepath)'''run'''
if __name__ == '__main__':args = parseArgs()image = cv2.imread(args.imagepath)roi = cv2.selectROI(image, False)mask = image.copy()mask[:] = 0mask[roi[1]: roi[1] + roi[3], roi[0]: roi[0] + roi[2], :] = np.array((255, 255, 255))maskpath = f'mask_{int(time.time())}.png'cv2.imwrite(maskpath, mask)inpainting(masked_img_path=args.imagepath, mask_path=maskpath, savepath=args.outputpath)

输入图像:

输出图像:

神奇不神奇?想不想学?

效果展示

在终端运行如下命令即可:

python3 inpainting.py --imagepath 待修复图像路径 --outputpath 修复结果保存路径

懒得录屏了,随便表演个抹酒窝之术吧。

原始图像:

打马:

修复:

找到商机了,听说修复老照片赚了一套房?Python带你实现老旧照片修复。相关推荐

  1. 教你如何把模糊老旧照片修复成高清照片,一款照片高清修复工具

    HitPaw Photo Enhancer 可以帮助您使照片更清晰并根据需要放大,能够帮助用户修复图片的质量,让模糊的图像变得高清美观,支持修复各种类型的图片,将图片放大的同时还能提升画质,让图片更加 ...

  2. 微软开源: 老旧照片修复的AI算法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 开源最前线(ID:OpenSourceTop) 猿妹整编 | 来源 ...

  3. 几十年前的老旧照片如何修复?还不知道旧照片怎么恢复清晰吗?

    那些旧照片本身会随着时间的推移而褪色.褶皱.老旧照片修复主要是从褪色.变色.破损.发霉.的旧相片修复翻新,到模糊不清清晰化处理,大面积严重破损照片修补. 十年以前,没有电脑,没有手机,更没有存储照片工 ...

  4. 大学计算机案例教程旧照片修复,破损旧照片修复教程

    破损旧照片修复教程 照片修复/制图/文 万壑松风听琴韵 有一些保存不善的旧照片,会出现撕裂.磨损.破损.发黄.受潮后相纸药膜粉化剥落.污染.沾染灰尘.褪色.划伤.发霉等现象,甚至画面变得漫漶不清.对于 ...

  5. 用 Python 分分钟让旧照片修复清晰

    翻开家里的的相片册,可以看到每张照片都是那么的弥足珍贵,特别是很久以前的照片,都是美好的回忆,还有那些年错过的场景,都被记录下来了,不过可惜的是,随着时间的流逝,照片可能泛黄,出现划痕,画质损失等等, ...

  6. GitHub开源力作!最新旧照片修复技术:细致到面部毛孔

    最近,几个中国小伙组成的微软研究团队开发了一种全新的修复旧照片的工具,那些我们想要留在心底或未曾经历过的从前,都可以通过翻看老照片找回来,目前已在 GitHub 上开源. AI 是如何修复旧照片的 没 ...

  7. 【PS教程】旧照片修复技巧

    旧照片变清晰的方法: 1.Ctrl+J拷贝一个新的图层. 2.在新的图层中,选择顶部"滤镜--其他--高反差保留",将半径像素设为4,点击"确定". 3.然后再 ...

  8. 大学计算机案例教程旧照片修复,对损坏老照片进行修复的PS教程

    本教程需要非常深厚的美术功底,还原的时候基本上是鼠绘的过程,在此不得不佩服作者的高超手艺和美术功底!教程唯一确定是作者没有一步一步详细说明!原图 一.首先将原图复制一个或几个图层(用图层属性时就复制1 ...

  9. 旧照片修复-模糊图片变清晰-2023年度最强神器 codeformer

    CodeFormer是一种基于AI技术深度学习的人脸复原模型,由南洋理工大学和商汤科技联合研究中心联合开发.该模型通过结合了VQGAN和Transformer等技术,可以通过提供模糊或马赛克图像来生成 ...

最新文章

  1. python 自动生成C++代码 (代码生成器)
  2. [原创]用递归写的一个object 转换成JSON的函数
  3. 一次解析系统_消防稳压泵的流量、压力、选型以及配套气压罐的重难点解析
  4. UVA307 Sticks小木棍
  5. 【NOI2019】斗主地【期望】【组合数学】【下降幂】【插值】
  6. 记个SwitchButton笔记
  7. JavaScript基础1
  8. paip.c++ qt 共享库dll的建立
  9. 【反反爬实战】网易有道翻译(免费、即时的多语种在线翻译)
  10. 笔记本触摸板操作手势
  11. Flask+SQLAlchemy+graphene+docker示例
  12. CSS3弹性布局、响应式布局、PS
  13. mysql|给表格插入一列,自带固定值
  14. 2022哈工大软件构造课程总结与经验分享(复习指导)
  15. Java学习博客转载
  16. 推送服务升级,支持小米推送国际版以及更灵活的推送方式|11月更新
  17. SpringMVC:整合SSM
  18. 在Director中发送E-mail
  19. 打印系统开发(24)——WinForm开发(45)——winform打印,自己设置打印纸张大小例如500*800px。应该怎么做呢?
  20. 谷粒学院-统一异常处理(全局异常处理、特定异常处理、自定义异常处理)

热门文章

  1. 用Python绘制多彩的斐波那契螺旋线(黄金螺旋线)
  2. Apache反向代理
  3. ATLAS最强算力 最小体积-全爱QA200DK-16T边缘计算算力100x75x25mm体积
  4. 【PCBA方案设计】快速体温计方案
  5. 学生资助管理系统(JavaWeb)
  6. 技术交流:接元宝小游戏(JQ转JS并解决游戏过程问题)
  7. ESP8266 SDK开发环境搭建及HelloWorld编程教程
  8. 2022流动式起重机司机考试试题及在线模拟考试
  9. twine upload设置账号和密码,避免每次都输账号和密码
  10. 新“内卷”席卷科技圈,Google CEO 要求 174000 员工提高工作效率!