【Opencv实战】几十年前的Vlog火了:黑白老照片如何上色?这黑科技操作一定要知道,复原度超高,竟美的出奇~(图像修复神级代码)
导语
哈喽大家好呀!我是每天疯狂赶代码的木木子吖~情人节快乐呀!

所有文章完整的素材+源码都在👇👇
粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。
我们都知道,有很多经典的老照片,受限于那个时代的技术,只能以黑白的形式传世。尽管黑
白照片别有一番风味,但是彩色照片有时候能给人更强的代入感。今天在这里给大家提供一种
给黑白照片上色的方法,尽管无法还原当时真实的颜色,但确实可以达到后期者的心中所想的
颜色。
当然,除了让老照片变成彩色这一用途之外,还可以将现时的一些黑白照片自行染上彩色,完
全按照自己的想法来上色,再和彩色的原图进行对比,也不失为一种有趣的玩法。

——小故事
年前在家中进行过年春节大扫除的时候,意外发现了爷爷奶奶年轻时的照片,只不过当时的拍
摄技术还不发达,出来的相片都是黑白色的。所以我想将它们还原成彩色,给他们一个惊喜!
我不是敲代码的蛮,于是今天在情人节这天偷偷把老照片进行了一个色彩修复,这次尝试还别
说,亲测了一下效果感觉效果还不错,于是今天打算将它们分享给有同样想法的你们。
旧时代的爷爷奶奶、外公外婆的照片都可以进行一个色彩修复哦,超惊艳滴~
如果你也想知道黑白照片还原成彩色怎么弄的话,就赶紧跟着我的步骤一步步操作起来吧,过
程并不繁琐,就算你是修图小白也可以轻松驾驭!(只要你会代码一切皆有可能~厚脸皮.jpg)

正文
利用图像处理技术,基于数字化存储的玻璃底板图像自动生成尽量非虚化的彩色图像。从原始
图像文件中分割提取三个彩色通道图像,将它们对齐并彼此叠加在一起,最终形成一张RGB彩
色图像。
一、环境准备
1)运行环境
本文用到的环境如下——
Python3、Pycharm社区版,第三方模块:Opencv、numpy。
部分自带的模块只要安装完 Python就可以直接使用了,需要安装 的库的话看教程下🎐
模块安装👇:
pip install +模块名 镜像源安装:pip install -i https://pypi.douban.com/simple/+模块名 (之前有说过安装报错的几种方式跟解决方法,不会安装的可以去看下,还有很多国内镜像源也有文章的)
图片文本素材等👇——

都是一些老照片,大家可以随便准备一些哈,当然需要完整的素材图片跟源码的文末找我即可!
二、代码展示
1) fixTif.py: tif图像的修复,使用的是openCV内置的高斯金字塔
import numpy as np
import cv2 as cvdef img_translate(img, tx, ty):"""对图像进行平移"""heigh, width = img.shape[:2]m = np.float32([[1, 0, tx], [0,1, ty]])res = cv.warpAffine(img, m, (width, heigh))return resdef ssd(I1, I2):"""ssd函数,衡量颜色通道是否对齐"""return np.sum((I1 - I2)*(I1 - I2))def find_xy(img1, g):"""找到最佳的平移参数,并对该颜色通道图片进行平移"""# 初始化loss = ssd(img1, g)img = img1u = 0v = 0# 根据ssd函数寻找最佳的对齐位置for i in range(-20, 30):for j in range(-20, 30):img2 = img_translate(img1, i, j)loss1 = ssd(img2, g)if loss > loss1:loss = loss1img = img2u = iv = jprint(u, v)return imgdef readImage(imname):"""read in the image"""im = cv.imread(imname)im = cv.cvtColor(im, cv.COLOR_BGR2GRAY)return imdef separate(im):"""separate color channels"""# compute the height of each part (just 1/3 of total)height = np.floor(im.shape[0] / 3.0).astype(np.int)b = im[:height]g = im[height: 2 * height]r = im[2 * height: 3 * height]return b, g, rdef merge(b,g,r):"""将三个颜色通道进行merge"""return cv.merge((b,g,r))def gaussianPyramid(img):"""直接使用OpenCV的高斯金字塔进行实现"""return cv.pyrDown(img)if __name__ == '__main__':# name of the input file#imname = 'images/train.tif'imname = 'images/three_generations.tif'#imname = 'images/lady.tif'#imname = 'images/emir.tif'#imname = 'images/icon.tif'#imname = 'images/self_portrait.tif'#imname = 'images/village.tif'#imname = 'images/turkmen.tif'im = readImage(imname)print(im.shape)#cv.imshow("source image", im)# 获取平均切割的三个颜色通道b, g, r = separate(im)# 对三个颜色通道分别应用高斯金字塔b = gaussianPyramid(b)b = gaussianPyramid(b)b = gaussianPyramid(b)g = gaussianPyramid(g)g = gaussianPyramid(g)g = gaussianPyramid(g)r = gaussianPyramid(r)r = gaussianPyramid(r)r = gaussianPyramid(r)im_out0 = merge(b, g, r)cv.imshow("before", im_out0)# 颜色通道平移进行对齐,对齐的过程中以绿色作为基准b = find_xy(b, g)r = find_xy(r, g)# 将平移处理后的三通道merge,得到处理后的图片im_out1im_out1 = merge(b, g, r)# 将修复后的图片写进磁盘#cv.imwrite('out/after_' + imname[7:], im_out1)cv.imshow("after", im_out1)#print(im_out1.shape)cv.waitKey(0)
2)运行程序
import numpy as np
import cv2 as cv# name of the input file
imname = 'images/monastery.jpg'# read in the image
im = cv.imread(imname)
im = cv.cvtColor(im, cv.COLOR_BGR2GRAY)
print(im.shape)
cv.imshow("source image", im)# convert to double (might want to do this later on to save memory)
# im = img_as_float(im)# compute the height of each part (just 1/3 of total)
height = np.floor(im.shape[0] / 3.0).astype(np.int)# separate color channels
b = im[:height]
g = im[height: 2 * height]
r = im[2 * height: 3 * height]# align the images
# functions that might be useful for aligning the images include: np.roll, np.sum
# ag = align(g, b)
# ar = align(r, b)# create a color image
# im_out = cv.merge((ar, ag, b)) # this line should be activated after implementing the align functions
im_out = cv.merge((b, g, r)) # this line should be deleted after implementing the align functions# save and display the output image
cv.imwrite("out/out_fname.jpg", im_out)
cv.imshow("output image", im_out)cv.waitKey(0)
三、效果展示
1)黑白照片风景上色

2)黑白照片色彩修复多图

3)黑白照片-奥黛丽赫本彩色

4)黑白照片-结婚老照片上色

总结
大家看完以上详细教程,学会黑白照片还原成彩色怎么弄了吗?如果你们有更简单的方法,欢
迎在评论区分享出来,我们可以一块探讨一番~
好啦。今天的内容写到这里旧正式结束了哈,喜欢的小可爱三连领取免费的源码哦👇
🎯完整的免费源码领取处:找我吖!文末公众hao可自行领取,滴滴我也可!
🔨推荐往期文章——
项目1.1 动漫化人物
【突破次元壁】谁说二次元离我们遥远?Python特效火遍全网,关键技术原来是它。
项目1.2 颜值打分系统
Python小测试 2021最新男女颜值打分小系统标准出炉,看哭无数人...
项目3.0 Opencv换背景图
【Opencv实战】AI换背景:朋友结婚没有蓝天白云怎么办?幸亏我急中生智。
项目3.1 抠图神器
【爆赞】这款Python小程序自动抠图只需5秒,秒杀PS手动抠图?
项目3.3 图片处理加/去水印
【一篇解决】Python图片处理: 去水印/加水印—这几个方法你一定要学会,太神奇了~(建议保留)
项目3.4 Opencv水果识别小程序
【Opencv实战】识别水果的软件叫什么?一款超好用的识别软件分享,一秒鉴定(真是活~久~见~啊)
🎄文章汇总——
汇总合集 Python—2022 |已有文章汇总 | 持续更新,直接看这篇就够了
(更多内容+源码都在✨文章汇总哦!!欢迎阅读喜欢的文章🎉~

相关文章:
【Opencv实战】几十年前的Vlog火了:黑白老照片如何上色?这黑科技操作一定要知道,复原度超高,竟美的出奇~(图像修复神级代码)
导语 哈喽大家好呀!我是每天疯狂赶代码的木木子吖~情人节快乐呀! 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 我们都知道,有很多经典的老照片…...
React源码分析(一)Fiber
前言 本次React源码参考版本为17.0.3。 React架构前世今生 查阅文档了解到, React16.x是个分水岭。 React15及之前 在16之前,React架构大致可以分为两层: Reconciler: 主要职责是对比查找更新前后的变化的组件;R…...
小樽 C++指针—— (壹) 指针变量
(壹) 指针变量 一、指针的概念与定义 二、给指针变量p赋值 三、指针变量的的、-运算 四、无类型指针 五、多重指针 C (壹) 指针变量 小明想把从李华家借来的书——《CCF中学生计算机程序设计》还给李华,但李华不在家,于是把书放到书架第3层的最右边…...
java 代码块 万字详解
概述 : 特点 : 格式 : 情景 : 细节 : 演示 : 英文 : //v,新版编辑器无手动添加目录的功能,PC端阅读建议通过侧边栏进行目录跳转;移动端建议用PC端阅读。😂一、概述 :代码块,也称为初始化块,属于类中的成员&…...
杂项-图片隐写
图片隐写的常见隐写方法: 三基色:RGB(Red Green Blue) 图片文件隐写 1.Firework 使用winhex打开文件时会看到文件头部中包含firework的标识,通过firework可以找到隐藏图片。 使用场景:查看隐写的图片文件…...
【高性价比】初学者入门吉他值得推荐购买的民谣单板吉他品牌—VEAZEN费森吉他
“在未知的世界里,我们是一群不疲不倦的行者,执念于真善美,热衷于事物的极致。我们抽丝剥茧,不断地打败自己,超越自己,我们无所畏惧终将成为巨人。”这是VEAZEN吉他官网首页上很明显的一段话,也…...
2023年浙江交安安全员考试题库及答案
百分百题库提供交安安全员考试试题、交安安全员考试真题、交安安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 50.根据《建设工程安全生产管理条例》第65条规定,施工单位有下列()行…...
【新】华为OD机试 - 跳格子(Python)
跳格子 题目 地上共有 N 个格子,你需要跳完地上所有的格子, 但是格子间是有强依赖关系的,跳完前一个格子后, 后续的格子才会被开启,格子间的依赖关系由多组 steps 数组给出, steps[0] 表示前一个格子, steps[1] 表示 steps[0] 可以开启的格子: 比如 [0,1] 表示从跳完第…...
乡村能做社区团购吗?怎么做?我走访调查后发现机会很大
乡村能做社区团购吗?怎么做?我走访调查后发现机会很大#深度触网 #社区团购 #乡村振兴##乡村旅游##县域经济##市场经济##农文旅产业振兴研究院#乡村旅游能带动农产品加工业、服务业、商贸业等相关联产业的发展 乡村能做社区团购吗?怎么做&…...
态路小课堂丨下一代数据中心100G接口第二篇——SFP-DD封装
100G光模块根据封装模式可分为QSFP28、CXP、CFP、CFP2、FCP4、DSFP和SFP-DD等。态路小课堂之前已经大量介绍了相关内容(。 态路小课堂丨下一代数据中心100G接口——DSFP态路小课堂丨100G解决方案-425G NRZ光模块态路小课堂丨什么是100G QSFP28单波光模块?…...
状态栏和导航栏高度获取
/*** 获取导航栏高度*/public static int getNavigationBarHeight(Context context){int navigationBarHeight 0;int resourceId context.getResources().getIdentifier("navigation_bar_height", "dimen", "android")if (resourceId > 0) {…...
插曲:第一桶金 1w 的来由
因为前天跟同事聊天,发现有个比较严重的认知,就是关于赚钱思维。 同事反馈说工作十来年,却没有接过私活,这里话分两头,有可能私 活钱少,但他给我的理由是:私活太麻烦,有时候不敢接&a…...
中国甲基异丁基甲醇行业头部企业市场占有率及排名调研报告
内容摘要 本文调研和分析全球甲基异丁基甲醇发展现状及未来趋势,核心内容如下: (1)全球市场总体规模,分别按销量和按收入进行了统计分析,历史数据2018-2022年,预测数据2023至2029年。 …...
streamlit自定义组件教程和组件开发环境配置
About create your own component: you can follow this tutorial streamlit tutorial 重要!以下步骤都是在教程的基础上更改的。这个教程做的很棒。 Component development environment configuration: 根据文章 https://streamlit-com…...
Windows CMD常用命令
目录 【打开CMD命令】 【网络测试命令】 ipconfig------查看本机网卡信息 ping------测试网络是否通畅 tracert------追踪路由,也可以用来查看网络连通性 telnet------查看目的主机ip的端口号是否开放 tcping------查看目的主机ip的端口号是否开放 【关于路…...
ChIP-seq 分析:数据比对(3)
读取 reads(二者含义相同,下文不做区分)1. ChIPseq reads 比对 在评估读取质量和我们应用的任何读取过滤之后,我们将希望将我们的读取与基因组对齐,以便识别任何基因组位置显示比对读取高于背景的富集。 由于 ChIPseq…...
并非从0开始的c++之旅 day2
并非从0开始的c之旅 day2一、变量1、 变量名的本质二、程序的内存分区模型1、内存分区运行之前运行之后三、栈区注意事项四、堆区1、堆区使用2、堆区注意事项五、全局变量静态变量1、静态变量2、全局变量六、常量1、全局const常量2、局部const常量七、字符串常量一、变量 既能…...
Linux进阶(Shell编程学习一)
由于shell脚本在java项目运维方面极其重要,比如服务的启动脚本,日志的分割脚本,文件的管理脚本大多都是shell脚本去实现的。所以作为java开发者懂linux的基本命令,会基本的shell编程是必要的。 Shell 是一个用 C 语言编写的程序&…...
sql 优化
sql 优化1. mysql 基础架构1.1 mysql 的组成2. mysql 存储引擎2.1MyISAM2.2 InnoDB2.3 MyISAM 和 InnoDB 的对比3. mysql 索引3.1 Hash 索引3.2 B-Tree 索引3.3 BTree 索引3.4 R-Tree 索引3.5 Full-Text 索引4. sql 优化4.1 避免 select *4.2 避免在where子句中使用or来连接条件…...
第7篇:Java的学习路径
目录 1、Java学习主要内容概览 1.1 Java基础 1.2 数据库技术 1.3 动态网页技术 1.4中间件技术...
Llama-3.2V-11B-cot跨平台部署:从VMware虚拟机到物理服务器
Llama-3.2V-11B-cot跨平台部署:从VMware虚拟机到物理服务器 最近在帮几个团队部署Llama-3.2V-11B-cot这个多模态大模型,发现一个挺有意思的现象:大家的基础设施环境差别太大了。有的团队用的是VMware虚拟化集群,资源灵活但总觉得…...
医学影像处理实战:用Python实现Marching Cubes算法重建CT扫描数据
医学影像处理实战:用Python实现Marching Cubes算法重建CT扫描数据 在医学影像处理领域,三维重建技术正逐渐成为临床诊断和科研分析的重要工具。想象一下,当医生面对一堆二维CT切片时,如何快速构建出患者骨骼或器官的三维模型&…...
Qwen3-0.6B-FP8效果展示:用‘把这篇技术博客改写成适合小学生理解的版本’实测简化能力
Qwen3-0.6B-FP8效果展示:用‘把这篇技术博客改写成适合小学生理解的版本’实测简化能力 1. 引言:当大模型遇上“小学生”挑战 想象一下,你面前有一篇满是专业术语、复杂逻辑的技术文章,现在需要把它讲给一个小学三年级的孩子听&…...
OpenClaw云端体验方案:星图平台GLM-4.7-Flash镜像快速部署
OpenClaw云端体验方案:星图平台GLM-4.7-Flash镜像快速部署 1. 为什么选择云端沙盒环境 作为一个长期折腾本地环境的开发者,我深知在个人电脑上部署AI工具链的痛苦。从CUDA版本冲突到Python依赖地狱,每次尝试新工具都要花半天时间解决环境问…...
上海本凡科技引领小程序开发行业,凭实力成为最受欢迎的公司
上海本凡科技在小程序开发行业中取得的成就,可以归结为对客户需求的深刻理解和快速响应。公司致力于构建灵活易用的小程序,满足不同客户的商业目标。通过持续关注市场变化和用户反馈,本凡科技快速调整开发策略,以确保其产品始终符…...
中文语义相似度计算新范式:技术演进与实践路径
中文语义相似度计算新范式:技术演进与实践路径 【免费下载链接】Awesome-Chinese-LLM 整理开源的中文大语言模型,以规模较小、可私有化部署、训练成本较低的模型为主,包括底座模型,垂直领域微调及应用,数据集与教程等。…...
豆包geo优化系统,源码开发搭建解析
豆包Geo优化系统解析豆包Geo优化系统通常指基于地理位置(Geo)数据的智能优化系统,可能涉及路径规划、区域划分、资源分配等场景。以下是其核心开发搭建要点:系统架构设计采用微服务架构,模块化设计便于扩展:…...
用户样式管理新范式:Stylus如何重塑跨浏览器自定义体验
用户样式管理新范式:Stylus如何重塑跨浏览器自定义体验 【免费下载链接】stylus Stylus - Userstyles Manager 项目地址: https://gitcode.com/gh_mirrors/sty/stylus 在当今多浏览器并存的互联网生态中,用户面临着网页样式个性化的核心痛点&…...
OWL ADVENTURE优化升级:让你的视觉探索更流畅高效
OWL ADVENTURE优化升级:让你的视觉探索更流畅高效 1. 全新升级亮点概览 OWL ADVENTURE最新版本带来了多项性能优化和功能增强,让视觉探索体验更加流畅高效。这次升级不仅提升了核心AI引擎的处理能力,还对用户界面进行了多项改进,…...
Legado内置Web服务深度剖析:轻量级架构与跨设备阅读体验升级
Legado内置Web服务深度剖析:轻量级架构与跨设备阅读体验升级 【免费下载链接】legado Legado 3.0 Book Reader with powerful controls & full functions❤️阅读3.0, 阅读是一款可以自定义来源阅读网络内容的工具,为广大网络文学爱好者提供一种方便…...
