本demo输入一张24位BGR真彩色图像,输出32位BGRA带透明通道的彩色图像。
在输出前,对Alpha透明通道做了些处理。源24位真彩色图像的左下角置为透明。
在运行中查看BGRA四通道图片时,是无法查看到透明通道的。
必须要把图片保存下来,才能看到。
目前支持Alpha透明通道的图片封装格式为:
1、PNG:支持透明效果。PNG可以为原图像定义256个透明层次,使得彩色图像的边缘能与任何背景平滑地融合,从而彻底地消除锯齿边缘。这种功能是GIF和JPEG没有的。
2、gif:GIF的原义是“图像互换格式”,GIF文件的数据是一种基于LZW算法的连续色调的无损压缩格式。
3、TIFF:签图像文件格式(TaggedImageFileFormat,简写为TIFF)是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像。它最初由Aldus公司与微软公司一起为PostScript打印开发。TIFF与JPEG和PNG一起成为流行的高位彩色图像格式。
4、PSD:这是Photoshop图像处理软件的专用文件格式,文件扩展名是。psd,可以支持图层、通道、蒙板和不同色彩模式的各种图像特征,是一种非压缩的原始文件保存格式。扫描仪不能直接生成该种格式的文件。PSD文件有时容量会很大,但由于可以保留所有原始信息,在图像处理中对于尚未制作完成的图像,选用PSD格式保存是最佳的选择。
import cv2
import numpy as np
img=cv2.imread("cat.jpg")
img_bgra=cv2.cvtColor(img,cv2.COLOR_BGR2BGRA)
print(img_bgra.shape)
print(img_bgra)
b, g, r ,a= cv2.split(img_bgra)
print(a)
print(a.shape)
a[int(a.shape[0]/2):,int(a.shape[1]/2):]=0
#creating a dummy alpha channel image.
# alpha = np.ones(b.shape, dtype=b.dtype)*0
# print(alpha)
#alpha = alpha.astype(np.uint8)
img_bgra = cv2.merge((b, g, r, a))
print(img_bgra.shape)
#cv2.imshow("BGRA", img_bgra)
cv2.imwrite("BGRA.tiff",img_bgra)
#cv2.waitKey(0)
'''
这里不保存下来查看的话,在程序运行中展示并看不出差异。
保存图片时,要保存为png格式的图片,因为png或tiff文件即为BGRA四通道色彩空间的图像文件形式。
'''
'''
(572, 642, 4)
[[[ 20 14 7 255][ 15 9 2 255][ 14 8 1 255]...[ 12 13 11 255][ 26 23 19 255][ 26 23 19 255]]
[[ 22 16 9 255][ 18 12 5 255][ 18 12 5 255]...[ 13 11 10 255][ 7 4 0 255][ 7 4 0 255]]
[[ 20 14 7 255][ 17 11 4 255][ 17 11 4 255]...[ 16 14 13 255][ 15 12 8 255][ 15 12 8 255]]
...
[[ 14 10 5 255][ 14 10 5 255][ 13 9 4 255]...[ 66 60 49 255][ 41 32 22 255][ 64 55 45 255]]
[[ 14 10 5 255][ 14 10 5 255][ 13 9 4 255]...[ 43 37 26 255][ 37 28 18 255][ 57 48 38 255]]
[[ 13 9 4 255][ 13 9 4 255][ 13 9 4 255]...[ 16 10 0 255][ 13 4 0 255][ 29 20 10 255]]]
'''
具体效果如下: