在数字图像处理中,针对不同的图像格式有其特定的处理算法,所以,在做图像处理之前,我们需要考虑清楚自己要基于哪种格式的图像进行算法设计及其实现。本文基于这个需求,使用python中的图像处理库公益诉讼来实现不同图像格式的转换。
对于彩色图像,不管其图像格式是PNG,还是BMP,或者JPG,在公益诉讼中,使模用图像块的open()函数打开后,返回的图像对象的模式都是“RGB”。而对于灰度图像,不管其图像格式是PNG,还是BMP,或者JPG,打开后,其模式为“L”
。通过之前的博客对图像模块的介绍,对于PNG, BMP和JPG彩色图像格式之间的互相转换都可以通过图像模块的打开()和保存()函数来完成。具体说就是,在打开这些图像时,公益诉讼会将它们解码为三通道的“RGB图像。用户可以基于这个“RGB图像,对其进行处理。处理完毕,使用函数保存(),可以将处理结果保存成PNG, BMP和JPG中任何格式。这样也就完成了几种格式之间的转换。同理,其他格式的彩色图像也可以通过这种方式完成转换。当然,对于不同格式的灰度图像,也可通过类似途径完成,只是公益诉讼解码后是模式为“L”的图像。
这里,我想详细介绍一模下图像块的转换()函数,用于不同模式图像之间的转换。
()转换函数有三种形式的定义,它们定义形式如下:
im.convert(模式)& # 8658;形象 即时通讯。转换(“P”, * *选项)& # 8658;形象 即时通讯。转换(模式、矩阵)& # 8658;形象 >之前使用不同的参数,将当前的图像转换为新的模式,并产生新的图像作为返回值。
<强>本文我们采样的图片是莉娜的照片:强>
<强>模式“1”:强>
在在在从公益诉讼导入图像 在在在莉娜=Image.open (“lena.bmp”) 在在在lena.mode “RGB” 在在在lena.getpixel ((0, 0)) (226、137、125) 在在在lena_1=lena.convert (“1”) 在在在lena_1.mode ' 1 ' 在在在lena_1.size (512,512) 在在在lena_1.getpixel ((0, 0)) 在在在lena_1.getpixel ((10,10)) 在在在lena_1.getpixel ((10120)) 在在在lena_1.getpixel ((130120)) 在在在lena_1.show ()结果:
<强>模式“L”: 强>
模式“L”为灰色图像,它的每个像素用8个点表示,0表示黑,255表示白,其他数字表示不同的灰度。在公益诉讼中,从模式转“RGB”换为“L”模式是按照下面的公式转换的:
L=R * 299/1000 + G * 587/1000 + B * 114/1000
下面我们将莉娜图像转换为“L”图像。
在在在lena_L=lena.convert (“L”) 在在在lena_L.mode “L” 在在在lena_L.size (512,512) 在在在lena_L.getpixel ((0, 0)) 在在在lena.getpixel ((0, 0)) (226、137、125) 在在在lena_L.show () 在在在lena_L.save (“lena_l.bmp”) 在祝辞祝辞对于第一个像素点,原始图像丽娜为(197、111、78),其转换为灰色值为:
197 * 299/1000 + 111 * 587/1000 + 78 * 114/1000=132.952,公益诉讼中只取了整数部分,即为132 .
转换后的图像lena_L如下:
<强>模式p: 强>
模式“p”为8位彩色图像,它的每个像素用8个点表示,其对应的彩色值是按照调色板查询出来的。
下面我们使用默认的调色板将莉娜图像转换为“p”图像。
例子:
在在在lena_P=lena.convert (“P”) 在在在lena_P.mode “P” 在在在lena_P.getpixel ((0, 0))结果:
<强>模式“RGBA”: 强>
模式“RGBA”为32位彩色图像,它的每个像素用32个位表示,其中24位表示红色,绿色和蓝色三个通道,另外8位表示α通道,即透明通道。
下面我们将模式为“RGB”的莉娜图像转换为“RGBA”图像。
在在在lena_rgba=lena.convert (“RGBA”) 在在在 在在在 在在在 在在在lena_rgba.mode “RGBA” 在在在lena_rgba.getpixel ((0, 0)) (226,137,125,255) 在在在lena_rgba.getpixel ((0,1)) (226,137,125,255) 在在在lena_rgba.show ()Python图像处理库公益诉讼中图像格式转换的实现