區別:https://blog.csdn.net/weixin_42213622/article/details/109110140
1、cv2.imread()讀取的是圖像的真實數據。Image.open()函數只是保持了圖像被讀取的狀態,但是圖像的真實數據並未被讀取,因此如果對需要操作圖像每個元素,如輸出某個像素的RGB值等,需要執行對象的load()方法讀取數據
2、Image.open()得到的img數據類型呢是Image對象,不是普通的數組。
cv2.imread()得到的img數據類型是np.array()類型。
3、對於Image.open()函數默認彩色圖像讀取通道的順序為RGB,而cv2.imread()讀取通道的順序為BGR。同時,當圖像格式為RGBA時,Image.open(‘—.jpg’)讀取的格式為RGBA(其中A表示圖像的alpha通道,即RGBA共四個通道),而cv2.imread(’—.jpg’)讀取的格式是BGR,只有三個通道。
通過使用cv2.split(img)可得到cv2.imread()讀取的圖片img的BGR通道值。即使圖片是RGBA四通道,cv2.imread()方法仍然讀取的是BGR三通道。
相互轉換:
#1.Image對象->cv2(np.adarray) img = Image.open(path) img_array = np.array(img) #2.cv2(np.adarray)->Image對象 img = cv2.imread(path) img_Image = Image.fromarray(np.uint8(img))
opencv用法:
一、讀入圖像
使用函數cv2.imread(filepath,flags)讀入一副圖片。
- filepath:要讀入圖片的完整路徑
- flags:讀入圖片的標志
- cv2.IMREAD_COLOR:默認參數,讀入一副彩色圖片,忽略alpha通道
- cv2.IMREAD_GRAYSCALE:讀入灰度圖片
- cv2.IMREAD_UNCHANGED:顧名思義,讀入完整圖片,包括alpha通道
import numpy as np import cv2 img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
二、顯示圖像
使用函數cv2.imshow(wname,img)顯示圖像,第一個參數是顯示圖像的窗口的名字,第二個參數是要顯示的圖像(imread讀入的圖像),窗口大小自動調整為圖片大小。
cv2.imshow('image',img) cv2.waitKey(0) cv2.destroyAllWindows() #dv2.destroyWindow(wname)
cv2.waitKey顧名思義等待鍵盤輸入,單位為毫秒,即等待指定的毫秒數看是否有鍵盤輸入,若在等待時間內按下任意鍵則返回按鍵的ASCII碼,程序繼續運行。若沒有按下任何鍵,超時后返回-1。參數為0表示無限等待。不調用waitKey的話,窗口會一閃而逝,看不到顯示的圖片。
cv2.destroyAllWindow()銷毀所有窗口
cv2.destroyWindow(wname)銷毀指定窗口
三、保存圖像
使用函數cv2.imwrite(file,img,num)保存一個圖像。第一個參數是要保存的文件名,第二個參數是要保存的圖像。可選的第三個參數,它針對特定的格式:對於JPEG,其表示的是圖像的質量,用0 - 100的整數表示,默認95;對於png ,第三個參數表示的是壓縮級別,默認為3。
注意:
cv2.IMWRITE_JPEG_QUALITY類型為 long,必須轉換成 int。
cv2.IMWRITE_PNG_COMPRESSION,從0到9 壓縮級別越高圖像越小。
cv2.imwrite('1.png',img, [int(cv2.IMWRITE_JPEG_QUALITY), 95]) cv2.imwrite('1.png',img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
PIL用法:
convert函數
使用Image.open讀出圖像,如果不使用.convert(‘RGB’)進行轉換的話,讀出來的圖像是RGBA四通道的,A通道為透明通道,使用convert(‘RGB’)轉換后就去掉透明通道
save函數
image.save()函數
注意: 針對於保存為JPG/JPEG格式的圖片的情況。
在使用Pillow中的Image.save()方法,使用默認參數保存jpg圖片的過程中發現圖片被壓縮的很嚴重,導致原來很大的大小變成幾十K。這是因為在保存為jpg的過程中,內部使用壓縮算法對圖片進行的壓縮處理。
自定義壓縮質量參數:
imObj.save(img_name, quality=(1:100))
quality參數: 保存圖像的質量,值的范圍從1(最差)到95(最佳)。 默認值為75,使用中應盡量避免高於95的值; 100會禁用部分JPEG壓縮算法,並導致大文件圖像質量幾乎沒有任何增益。使用此參數后,圖片大小會增加。
自定義圖片大小:
imObj.save(new_name, quality=(1:100), subsampling=0/1/2)
subsampling參數:子采樣,通過實現色度信息的分辨率低於亮度信息來對圖像進行編碼的實踐。
采樣值0,1和2,對應於4:4:4, 4:2:2 和 4:2:0。