python中opencv與PIL圖片讀取保存及相互轉化方式
opencv與PIL圖片讀取保存及相互轉化
1. opencv讀取顯示圖片
import cv2
img = cv2.imread('img.jpg')
cv2.imshow('img', img) # 圖片顯示
cv2.waitKey() # 括號內的輸入控制imshow的持續(xù)時間其中waitKey()表示等待用戶按鍵,若不加這句,則圖片顯示一閃而過。
cv2讀取的圖片即img為numpy.ndarray,大小即為(w,h,c)。
2. PIL讀取顯示圖片
from PIL import Image
image = Image.open("img.jpg")
image.show()不需要waitKey(),圖片會持續(xù)顯示。
image為PIL格式。
3. opencv與PIL相互轉換
- PIL轉opencv
import cv2
from PIL import Image
import numpy
image = Image.open("img.jpg") # PIL讀取
img = cv2.cvtColor(numpy.asarray(image), cv2.COLOR_RGB2BGR) # 轉換代碼
cv2.imshow('img', img) # opencv顯示
cv2.waitKey()先將PIL格式轉化為numpy.ndarray,再轉換成BGR通過opencv顯示,opencv用的都是BGR格式。
- opencv轉PIL
import cv2
from PIL import Image
img = cv2.imread('img.jpg') # opencv讀取
image = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) # 轉換代碼
image.show() # PIL顯示先將numpy由BGR轉成RGB,再轉成PIL格式顯示
4. 保存圖片
- opencv保存–imwrite()
import cv2
img = cv2.imread('img.jpg')
cv2.imwrite('XXX.jpg', img) # 保存為XXX.jpg- PIL保存–save()
from PIL import Image
image = Image.open("img.jpg")
image.save('XXX.jpg') # 保存為XXX.jpgPIL圖片與OpenCV圖片的相互轉換
PIL圖片與 OpenCV圖片的相互轉換是通過數(shù)組格式轉換的。
通過 type() 函數(shù),我們可以觀察到通過 cv2.imread()函數(shù)得到的圖片格式為 numpy.ndarray;
通過 Image.open()函數(shù)得到的圖片格式為 PIL.JpegImagePlugin.JpegImageFile,而在 Image中存在通過數(shù)組格式加載圖像的方法 Image.fromarray。
因此,以數(shù)組格式作為中間者可實現(xiàn) PIL圖片與 OpenCV圖片之間的相互轉換,
代碼如下:
import cv2
import numpy as np
from PIL import Image
def load_img_by_cv(file):
return cv2.imread(file)
def load_img_by_PIL(file):
return Image.open(file)
def cv2PIL(img_cv):
return Image.fromarray(cv2.cvtColor(img_cv,cv2.COLOR_BGR2RGB))
def PIL2cv(img_pil):
return cv2.cvtColor(np.asarray(img_pil),cv2.COLOR_RGB2BGR)注意通過 cv2 加載的圖片,默認色道格式為 BGR ,可通過 cv2.cvtColor 函數(shù)進行轉換;通過 PIL 加載的圖片,默認色道格式為 RGB ,可通過圖像的 convert 方法進行轉換。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
PyQt教程之自定義組件Switch?Button的實現(xiàn)
這篇文章主要為大家詳細介紹了PyQt中如何實現(xiàn)自定義組件Switch?Button,文中的示例代碼簡潔易懂,具有一定的學習價值,感興趣的可以了解一下2023-05-05
Python工程實踐之np.loadtxt()讀取數(shù)據
為了方便使用和記憶,有時候我們會把numpy.loadtxt()縮寫成np.loadtxt(),這篇文章主要給大家介紹了關于Python工程實踐之np.loadtxt()讀取數(shù)據的相關資料,需要的朋友可以參考下2023-07-07

