使用python进行PNG图像和JPEG图像的通道混合
图像通道介绍
图像在计算机中是以数字矩阵形式存储的,我们常见的图像是JPEG格式,后缀为JPEG或者JPG,此种图像对应的矩阵有三个通道,代表着每个像素有R红,G绿,B蓝三个颜色分量。另一种常见的无损压缩图像格式为PNG,不同于JPEG,此格式的图像在计算机中有四个通道,第四个通道Alpha代表透明度。本文要做的就是将一个PNG图像的前景(RGB通道部分叠加到另一个背景图像上,类似于PS的抠图操作)
如何利用OpenCV实现?
下面来看下代码实现部分,首先是python的实现:
import numpy as np
import cv2
foreGroundImage = cv2.imread("foreGroundAsset.png",-1)
## 先将通道分离
b,g,r,a = cv2.split(foreGroundImage)
#得到PNG图像前景部分,在这个图片中就是除去Alpha通道的部分
foreground = cv2.merge((b,g,r))
#得到PNG图像的alpha通道,即alpha掩模
alpha = cv2.merge((a,a,a))
background = cv2.imread("backGround.jpg")
#因为下面要进行乘法运算故将数据类型设为float,防止溢出
foreground = foreground.astype(float)
background = background.astype(float)
cv2.imwrite("alpha.jpg",alpha)
#将alpha的值归一化在0-1之间,作为加权系数
alpha = alpha.