Python生態(tài)圈圖像格式轉(zhuǎn)換問(wèn)題(推薦)
在Python生態(tài)圈里,最常用的圖像庫(kù)是PIL——盡管已經(jīng)被后來(lái)的pillow取代,但因?yàn)閜illow的API幾乎完全繼承了PIL,所以大家還是約定俗成地稱其為PIL。除PIL之外,越來(lái)越多的程序員習(xí)慣使用openCV來(lái)處理圖像。另外,在GUI庫(kù)中,也有各自定義的圖像處理機(jī)制,比如wxPyton,定義了wx.Image做為圖像處理類,定義了wx.Bitmap做為圖像顯示類。
下圖梳理出了PIL讀寫(xiě)圖像文件、cv2讀寫(xiě)圖像文件、PIL對(duì)象和cv2對(duì)象互轉(zhuǎn)、PIL對(duì)象和wx.Image對(duì)象互轉(zhuǎn)、以及numpy數(shù)組轉(zhuǎn)存圖像的方法。掌握了這些方法,足可應(yīng)對(duì)各種各樣的圖像處理需求了。
1. PIL讀寫(xiě)圖像文件
下面的代碼,演示了用PIL讀取png格式的圖像文件,剔除alpha通道后轉(zhuǎn)存為jpg格式的圖像文件。
>>> from PIL import Image >>> im = Image.open(r'D:\CSDN\Python_Programming.png') >>> r,g,b,a = im.split() >>> im = Image.merge("RGB",(r,g,b)) >>> im.save(r'D:\CSDN\Python_Programming.jpg')
2. cv2讀寫(xiě)圖像文件
下面的代碼,演示了用cv2讀取png格式的圖像文件,轉(zhuǎn)存為jpg格式的圖像文件。
>>> import cv2 >>> im = cv2.imread(r'D:\CSDN\Python_Programming.png') >>> cv2.imwrite(r'D:\CSDN\Python_Programming.jpg', im) True
3. PIL對(duì)象和cv2對(duì)象互轉(zhuǎn)
cv2格式的對(duì)象,本質(zhì)上就是numpy數(shù)組,也就是numpy.ndarray對(duì)象。只要能做到PIL對(duì)象和numpy數(shù)組互轉(zhuǎn),自然就實(shí)現(xiàn)了PIL對(duì)象和cv2對(duì)象互轉(zhuǎn)。
下面的代碼,演示了用PIL讀取png格式的圖像文件,轉(zhuǎn)成numpy數(shù)組后保存為圖像文件。
>>> import cv2 >>> from PIL import Image >>> import numpy as np >>> im_pil = Image.open(r'D:\CSDN\Python_Programming.png') >>> im_cv2 = np.array(im_pil) >>> cv2.imwrite(r'D:\CSDN\Python_Programming.jpg', im_cv2) True
下面的代碼,用cv2讀取png格式的圖像文件,轉(zhuǎn)成PIL對(duì)象后保存為圖像文件。
>>> import cv2 >>> from PIL import Image >>> im_cv2 = cv2.imread(r'D:\CSDN\Python_Programming.png') >>> im_pil = Image.fromarray(im_cv2) >>> im_pil.save(r'D:\CSDN\Python_Programming.jpg')
4. PIL對(duì)象和wx.Image對(duì)象互轉(zhuǎn)
這是實(shí)現(xiàn)PIL對(duì)象和wx.Image對(duì)象互轉(zhuǎn)的兩個(gè)函數(shù)。
def PilImg2WxImg(pilImg): '''PIL的image轉(zhuǎn)化為wxImage''' image = wx.EmptyImage(pilImg.size[0],pilImg.size[1]) image.SetData(pilImg.convert("RGB").tostring()) image.SetAlphaData(pilImg.convert("RGBA").tostring()[3::4]) return image def WxImg2PilImg(wxImg): '''wxImage轉(zhuǎn)化為PIL的image''' pilImage = Image.new('RGB', (wxImg.GetWidth(), wxImg.GetHeight())) pilImage.fromstring(wxImg.GetData()) if wxImg.HasAlpha(): pilImage.convert( 'RGBA' ) wxAlphaStr = wxImg.GetAlphaData() pilAlphaImage = Image.fromstring( 'L', (wxImg.GetWidth(), wxImg.GetHeight()), wxAlphaStr ) pilImage.putalpha( pilAlphaImage ) return pilImage
5. numpy數(shù)組轉(zhuǎn)存圖像
下面的代碼,生成了一張515x512像素的隨機(jī)圖像。
>>> from PIL import Image >>> import numpy as np >>> a = np.random.randint(0,256,((512,512,3)), dtype=np.uint8) >>> im_pil = Image.fromarray(a) >>> im_pil.save(r'D:\CSDN\random.jpg')
總結(jié)
以上所述是小編給大家介紹的Python生態(tài)圈圖像格式轉(zhuǎn)換問(wèn)題,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
在Python中通過(guò)機(jī)器學(xué)習(xí)實(shí)現(xiàn)人體姿勢(shì)估計(jì)
姿態(tài)檢測(cè)是計(jì)算機(jī)視覺(jué)領(lǐng)域的一個(gè)活躍研究領(lǐng)域。這篇文章將為大家介紹在Python中如何利用機(jī)器學(xué)習(xí)進(jìn)行人體姿勢(shì)估計(jì),感興趣的小伙伴可以了解一下2021-12-12PyCharm新建.py文件時(shí)默認(rèn)添加信息的實(shí)現(xiàn)
這篇文章主要介紹了PyCharm新建.py文件時(shí)默認(rèn)添加信息的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07深入理解Python虛擬機(jī)中魔術(shù)方法的使用
這篇文章主要給大家介紹在?cpython?當(dāng)中一些比較花里胡哨的魔術(shù)方法,以幫助我們自己實(shí)現(xiàn)比較花哨的功能,當(dāng)然這其中也包含一些也非常實(shí)用的魔術(shù)方法,需要的可以參考下2023-05-05Python創(chuàng)建一個(gè)功能齊全的隨機(jī)驗(yàn)證碼生成器
驗(yàn)證碼通過(guò)生成一張包含難以識(shí)別的文本、數(shù)字或圖像的圖像,要求用戶正確輸入其中的內(nèi)容,用于驗(yàn)證用戶身份,本篇教程將帶領(lǐng)您一步步使用Python創(chuàng)建一個(gè)功能齊全的隨機(jī)驗(yàn)證碼生成器,我們將通過(guò)導(dǎo)入必要的庫(kù)、定義輔助函數(shù)以及編寫(xiě)主函數(shù)check_code()2024-04-04