亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Python圖像處理庫PIL中圖像格式轉換的實現

瀏覽:4日期:2022-08-06 09:46:45

在數字圖像處理中,針對不同的圖像格式有其特定的處理算法。所以,在做圖像處理之前,我們需要考慮清楚自己要基于哪種格式的圖像進行算法設計及其實現。本文基于這個需求,使用python中的圖像處理庫PIL來實現不同圖像格式的轉換。

對于彩色圖像,不管其圖像格式是PNG,還是BMP,或者JPG,在PIL中,使用Image模塊的open()函數打開后,返回的圖像對象的模式都是“RGB”。而對于灰度圖像,不管其圖像格式是PNG,還是BMP,或者JPG,打開后,其模式為“L”。

通過之前的博客對Image模塊的介紹,對于PNG、BMP和JPG彩色圖像格式之間的互相轉換都可以通過Image模塊的open()和save()函數來完成。具體說就是,在打開這些圖像時,PIL會將它們解碼為三通道的“RGB”圖像。用戶可以基于這個“RGB”圖像,對其進行處理。處理完畢,使用函數save(),可以將處理結果保存成PNG、BMP和JPG中任何格式。這樣也就完成了幾種格式之間的轉換。同理,其他格式的彩色圖像也可以通過這種方式完成轉換。當然,對于不同格式的灰度圖像,也可通過類似途徑完成,只是PIL解碼后是模式為“L”的圖像。

這里,我想詳細介紹一下Image模塊的convert()函數,用于不同模式圖像之間的轉換。

Convert()函數有三種形式的定義,它們定義形式如下:

im.convert(mode)⇒imageim.convert(“P”, **options)⇒imageim.convert(mode, matrix)⇒image

使用不同的參數,將當前的圖像轉換為新的模式,并產生新的圖像作為返回值。

本文我們采樣的圖片是lena的照片:

模式“1”:

>>> from PIL import Image>>> lena = 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((10,120))>>> lena_1.getpixel((130,120))>>> lena_1.show()

結果:

Python圖像處理庫PIL中圖像格式轉換的實現

模式“L”:

模式“L”為灰色圖像,它的每個像素用8個bit表示,0表示黑,255表示白,其他數字表示不同的灰度。在PIL中,從模式“RGB”轉換為“L”模式是按照下面的公式轉換的:

L = R * 299/1000 + G * 587/1000+ B * 114/1000

下面我們將lena圖像轉換為“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')>>>

對于第一個像素點,原始圖像lena為(197, 111, 78),其轉換為灰色值為:

197 *299/1000 + 111 * 587/1000 + 78 * 114/1000= 132.952,PIL中只取了整數部分,即為132。

轉換后的圖像lena_L如下:

Python圖像處理庫PIL中圖像格式轉換的實現

模式P:

模式“P”為8位彩色圖像,它的每個像素用8個bit表示,其對應的彩色值是按照調色板查詢出來的。

下面我們使用默認的調色板將lena圖像轉換為“P”圖像。

example:

>>> lena_P = lena.convert('P')>>> lena_P.mode’P’>>> lena_P.getpixel((0,0))

結果:

Python圖像處理庫PIL中圖像格式轉換的實現

模式“RGBA”:

模式“RGBA”為32位彩色圖像,它的每個像素用32個bit表示,其中24bit表示紅色、綠色和藍色三個通道,另外8bit表示alpha通道,即透明通道。

下面我們將模式為“RGB”的lena圖像轉換為“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圖像處理庫PIL中圖像格式轉換的實現

模式“CMYK”:

模式“CMYK”為32位彩色圖像,它的每個像素用32個bit表示。模式“CMYK”就是印刷四分色模式,它是彩色印刷時采用的一種套色模式,利用色料的三原色混色原理,加上黑色油墨,共計四種顏色混合疊加,形成所謂“全彩印刷”。

四種標準顏色是:C:Cyan =青色,又稱為‘天藍色’或是‘湛藍’M:Magenta =品紅色,又稱為‘洋紅色’;Y:Yellow =黃色;K:Key Plate(blacK) =定位套版色(黑色)。

下面我們將模式為“RGB”的lena圖像轉換為“CMYK”圖像。

>>> lena_cmyk = lena.convert('CMYK')>>> lena_cmyk.mode’CMYK’>>> lena_cmyk.getpixel((0,0))(29, 118, 130, 0)>>> lena_cmyk.getpixel((0,1))(29, 118, 130, 0)>>> lena_cmyk.show()

從實例中可以得知PIL中“RGB”轉換為“CMYK”的公式如下:

C = 255 - RM = 255 - GY = 255 - BK = 0

由于該轉換公式比較簡單,轉換后的圖像顏色有些失真。

轉換后的圖像lena_cmyk如下:

Python圖像處理庫PIL中圖像格式轉換的實現

模式“YCbCr”:

模式“YCbCr”為24位彩色圖像,它的每個像素用24個bit表示。YCbCr其中Y是指亮度分量,Cb指藍色色度分量,而Cr指紅色色度分量。人的肉眼對視頻的Y分量更敏感,因此在通過對色度分量進行子采樣來減少色度分量后,肉眼將察覺不到的圖像質量的變化。

模式“RGB”轉換為“YCbCr”的公式如下:

Y= 0.257*R+0.504*G+0.098*B+16Cb = -0.148*R-0.291*G+0.439*B+128Cr = 0.439*R-0.368*G-0.071*B+128

下面我們將模式為“RGB”的lena圖像轉換為“YCbCr”圖像。

>>> lena_ycbcr = lena.convert('YCbCr')>>> lena_ycbcr.mode’YCbCr’>>> lena_ycbcr.getpixel((0,0))(162, 107, 173)>>> lena.getpixel((0,0))(226, 137, 125)>>>

按照公式,Y =0.257*197+0.564*111+0.098*78+16= 136.877

Cb=-0.148*197-0.291*111+0.439*78+128= 100.785Cr = 0.439*197-0.368*111-0.071*78+128 = 168.097

由此可見,PIL中并非按照這個公式進行“RGB”到“YCbCr”的轉換。

轉換后的圖像lena_ycbcr如下:

Python圖像處理庫PIL中圖像格式轉換的實現

模式“I”

模式“I”為32位整型灰色圖像,它的每個像素用32個bit表示,0表示黑,255表示白,(0,255)之間的數字表示不同的灰度。在PIL中,從模式“RGB”轉換為“I”模式是按照下面的公式轉換的:

I = R * 299/1000 + G * 587/1000 + B * 114/1000

下面我們將模式為“RGB”的lena圖像轉換為“I”圖像。

>>> lena_I = lena.convert('I')>>> lena_I.mode’I’>>> lena_I.getpixel((0,0))>>> lena_I.getpixel((0,1))>>> lena_L = lena.convert('L')>>> lena_L.getpixel((0,0))>>> lena_L.getpixel((0,1))

從實驗的結果看,模式“I”與模式“L”的結果是完全一樣,只是模式“L”的像素是8bit,而模式“I”的像素是32bit。 

模式“F”

模式“F”為32位浮點灰色圖像,它的每個像素用32個bit表示,0表示黑,255表示白,(0,255)之間的數字表示不同的灰度。在PIL中,從模式“RGB”轉換為“F”模式是按照下面的公式轉換的:

F = R * 299/1000+ G * 587/1000 + B * 114/1000

下面我們將模式為“RGB”的lena圖像轉換為“F”圖像。

>>> lena_F = lena.convert('F')>>> lena_F.mode’F’>>> lena_F.getpixel((0,0))162.2429962158203>>> lena_F.getpixel((0,1))162.2429962158203>>>

Python圖像處理庫PIL中圖像格式轉換的實現

模式“F”與模式“L”的轉換公式是一樣的,都是RGB轉換為灰色值的公式,但模式“F”會保留小數部分,如實驗中的數據.

以上就是Python圖像處理庫PIL中圖像格式轉換的實現的詳細內容,更多關于PIL 圖像格式轉換的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 真实国产乱视频国语 | 欧美在线一区二区 | 久色tv| 欧美日韩国产一区二区 | 日本成本人啪啪黄3d动漫 | 国产综合网站 | 片在线观看免费观看视频 | 欧洲做视频在线观看 | 久色中文| 欧美三级不卡在线观线看高清 | 女人被狂躁的视频免费一一 | 嫩草精品 | 伊人干综合 | 日本亚洲一区二区 | 尤物在线看 | 久草福利在线播放 | 中文 国产 亚洲 喷潮 | 国产自线一二三四2021 | 日本理论在线观看被窝网 | 亚洲天堂久久精品成人 | 亚洲欧美另类在线视频 | 日韩黄色网页 | 国产精品色婷婷在线观看 | ww亚洲ww在线观看国产 | 成年人激情网站 | 久久www免费人成_看片高清 | 亚洲aaa视频 | 国产免费久久精品44 | 欧美成人免费草草影院 | 亚洲高清在线观看播放 | 麻豆传媒免费在线 | 中文字幕在线播放第一页 | 青娱乐久草 | 欧美在线一级毛片观看 | 亚洲一区精品视频在线 | 国产免费私拍一区二区三区 | 成年人黄色在线观看 | 韩国十八禁毛片无遮挡 | 亚洲国产精品日韩一线满 | 国产精品宾馆在线精品酒店 | 日本888xxxx |