Py学习  »  Python

手把手教你用Python做一个图像融合demo,小白可上手!

天池大数据科研平台 • 3 年前 • 343 次点击  
↑↑↑关注后"星标"天池大数据科研平台
人人都可以玩转大数据

 阿里云天池发布 

来源:AI学习经历分享    作者:千与千寻ML

创作背景

说到融合,一下子会让我们这些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即可使用,更多详细技术细节可以加我微信,与我进行交流哦~


我们下期见~



参考链接:https://www.cnblogs.com/wojianxin/p/12551921.html


关注阿里云天池,人人都可以玩转大数据



点赞+在看+转发
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/106781
 
343 次点击