OpenCV图像输入输出模块imgcodecs(imwrite函数的用法)
《OpenCV计算机视觉开发实践:基于Python(人工智能技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书
3.2.3 imwrite保存图片
函数imwrite可以用来输出图像到文件,其声明如下:
imwrite(filename, img[, params]) -> retval
其中,参数filename表示需要写入的文件名,必须加上后缀,比如“123.png”。注意,你要保存图片为哪种格式,就带有相同格式的后缀;img表示Mat类型的图像数据,就是要保存到文件中的源图像数据;参数params表示为特定格式保存的参数编码,它有一个默认值std::vector< int >(),所以一般情况下不用写。
通常,使用此函数能保存8位单通道或3通道(具有“BGR”通道顺序)图像。16位无符号(CV_16U)图像可以保存为PNG、JPEG和TIFF格式。32位浮点(CV_32F)图像可以以PFM、TIFF、OpenEXR和Radiance HDR格式保存;3通道(CV_32FC3)TIFF图像将使用LogLuv高动态范围编码(每像素4字节)保存。另外,使用此函数可以保存带有alpha通道的PNG图像。为此,创建8位(或16位)4通道图像BGRA,其中alpha通道最后到达。完全透明的像素应该将alpha设置为0,完全不透明的像素应该将alpha设置为255/65535。如果格式、深度或通道顺序不同,就在保存之前使用convertTo和cvtColor进行转换,或者,使用通用文件存储I/O函数将图像保存为XML或YAML格式。
下面的示例演示如何创建BGRA图像,将其保存为PNG图像文件,以及如何设置自定义压缩参数。
【例3.4】 创建BGRA图像并将其保存到PNG文件
import cv2
import numpy as np
img=cv2.imread("cat.jpeg")
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
alpha = np.ones(b.shape, dtype=b.dtype)*0 #creating a dummy alpha channel image.
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.png",img_bgra, [cv2.IMWRITE_PNG_COMPRESSION, 9])
cv2.waitKey(0)
在上述代码中,我们首先读取工程目录下的源图片cat.jpg,本例子输入一幅24位BGR真彩色图像,输出32位BGRA带透明通道的彩色图像。在输出前,对Alpha透明通道做了一些处理。源24位真彩色图像的左下角置为透明。在运行中查看BGRA四通道图片时,是无法查看到透明通道的,需要把图片保存下来,才能看到。
目前支持Alpha透明通道的图片封装格式为:
(1)PNG:支持透明效果。PNG可以为原图像定义256个透明层次,使得彩色图像的边缘能与任何背景平滑地融合,从而彻底地消除锯齿边缘。这种功能是GIF和JPEG没有的。
(2)gif:GIF的原义是“图像互换格式”,GIF文件的数据是一种基于LZW算法的连续色调的无损压缩格式。
(3)TIFF:标记图像文件格式(Tagged Image File Format,简写为TIFF)是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像。它最初由Aldus公司与微软公司一起为PostScript打印开发。TIFF与JPEG和PNG一起成为流行的高位彩色图像格式。
(4)PSD:这是Photoshop图像处理软件的专用文件格式,文件扩展名是.psd,可以支持图层、通道、蒙板和不同色彩模式的各种图像特征,是一种非压缩的原始文件保存格式。扫描仪不能直接生成该种格式的文件。PSD文件有时容量会很大,但由于可以保留所有原始信息,在图像处理中对于尚未制作完成的图像,选用PSD格式保存是最佳的选择。
运行工程,结果如图3-5所示。此时在工程目录下多了一个BGRA.png文件。这里不保存下来查看的话,在程序运行中展示并看不出差异。保存图片时,要保存为png格式的图片,因为png或tiff格式的文件即为BGRA四通道色彩空间的图像文件形式。另外,保存图片时,imwrite 的第三个参数是[cv2.IMWRITE_PNG_ COMPRESSION, 9],它实现了图片压缩功能,其中9代表图片保存时的压缩程度,有0~9这个范围的10个等级,数字越大表示压缩程度越高。最终运行结果如图3-5所示。
图3‑5