手把手教你用Python做一个图像融合demo,小白可上手!
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
创作背景
说到融合,一下子会让我们这些95后想起来童年的动漫游戏王了!
发动魔法卡——融合!
哈哈,今天说得当然不是游戏王里的魔法了,但是我们使用的是Python魔法,今天我们将使用Python编程语言,以及自带的图像处理工具包进行图像融合操作,来实现图像融合的酷炫效果!
前几天在网上看了一个demo,使用OpenCV(开源计算机视觉库)进行图像的融合操作,那么何谓图像的融合呢?
所谓图像的融合指的是指两幅图像变成,“你中有我,我中有你”(最近在看搜神传电视剧,哎,时间过得真的快!童年的回忆啊!)
融合效果
说回正题,将两幅图像进行融合操作,从微观上来说是将两幅图片的像素点用一定的比例进行叠加,得到新的的像素矩阵,那么到底这到底是个什么效果呢?
我们直接上来看,最终的效果展示!
第一组:
待融合图片
融合结果
第二组:
待融合图片
融合结果
待融合图片
融合结果
怎么样看完了上面的几组图片,是不是觉得图像融合的操作很酷炫呢,让我们一起来看看具体的实现方法。
算法流程
我们知道图像是一组矩阵数据,每一个矩阵对应着图像的像素值,彩色图像包括三个通道,R,G,B,分别对应着红,绿,蓝的三原色。那么我们进行图像的融合的底层原理就是进行图像的像素点的叠加融合,将二者采用一定量的比例进行融合操作,得到最终的融合版本图像,进行显示即可。
代码实现
首先导入所使用的Python工具包,使用的是numpy的数据科学工具包,以及OpenCV的图像处理包。
import cv2
import numpy as np
将图像信息转换为矩阵信息进行储存
img = cv2.imread("./pic1.jpeg").astype(np.float32)
H, W, C = img.shape
img2 = cv2.imread('./pic2.jpg').astype(np.float32)
img = cv2.resize(img, (499, 375));
其中的读入图片可以修改为自己的图片,进行DIY的调整,但是需要将两幅图片的大小进行统一化的处理,否则无法进行融合。
设置图像的融合权重,可以采用以其中一副图片为主,另一张图片为辅助,调节融合权重的数值,更改融合的效果。
a = 0.5
进行像素值的实际相加与融合计算操作,计算最终融合图像的像素值。
out = img * a + img2 * (1 - a)
out = out.astype(np.uint8)
最后将融合的图像进行显示即可
cv2.imwrite("result.jpg", out)
cv2.imshow("result", out)
cv2.waitKey(0)
cv2.destroyAllWindows()
怎么样,是不是感觉很容易做呢?那就赶紧自己动手试试吧,不仅可以尝试两张图片的融合,还可以进行三张图片的融合!
完整代码,在留言区的网盘链接,下载后,导入Pycharm即可使用,更多详细技术细节可以加我微信,与我进行交流哦~
好消息!
小白学视觉知识星球
开始面向外开放啦👇👇👇
下载1:OpenCV-Contrib扩展模块中文版教程 在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。 下载2:Python视觉实战项目52讲 在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。 下载3:OpenCV实战项目20讲 在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。 交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~