python中opencv與PIL圖片讀取保存及相互轉(zhuǎn)化方式
opencv與PIL圖片讀取保存及相互轉(zhuǎn)化
1. opencv讀取顯示圖片
import cv2 img = cv2.imread('img.jpg') cv2.imshow('img', img) # 圖片顯示 cv2.waitKey() # 括號內(nèi)的輸入控制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相互轉(zhuǎn)換
- PIL轉(zhuǎn)opencv
import cv2 from PIL import Image import numpy image = Image.open("img.jpg") # PIL讀取 img = cv2.cvtColor(numpy.asarray(image), cv2.COLOR_RGB2BGR) # 轉(zhuǎn)換代碼 cv2.imshow('img', img) # opencv顯示 cv2.waitKey()
先將PIL格式轉(zhuǎn)化為numpy.ndarray,再轉(zhuǎn)換成BGR通過opencv顯示,opencv用的都是BGR格式。
- opencv轉(zhuǎn)PIL
import cv2 from PIL import Image img = cv2.imread('img.jpg') # opencv讀取 image = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) # 轉(zhuǎn)換代碼 image.show() # PIL顯示
先將numpy由BGR轉(zhuǎn)成RGB,再轉(zhuǎn)成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.jpg
PIL圖片與OpenCV圖片的相互轉(zhuǎn)換
PIL
圖片與 OpenCV
圖片的相互轉(zhuǎn)換是通過數(shù)組格式轉(zhuǎn)換的。
通過 type()
函數(shù),我們可以觀察到通過 cv2.imread()
函數(shù)得到的圖片格式為 numpy.ndarray
;
通過 Image.open()
函數(shù)得到的圖片格式為 PIL.JpegImagePlugin.JpegImageFile
,而在 Image
中存在通過數(shù)組格式加載圖像的方法 Image.fromarray
。
因此,以數(shù)組格式作為中間者可實現(xiàn) PIL
圖片與 OpenCV
圖片之間的相互轉(zhuǎn)換,
代碼如下:
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ù)進行轉(zhuǎn)換;通過 PIL
加載的圖片,默認色道格式為 RGB
,可通過圖像的 convert
方法進行轉(zhuǎn)換。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python連接打印機實現(xiàn)打印文檔、圖片、pdf文件等功能
這篇文章主要介紹了python連接打印機實現(xiàn)打印文檔、圖片、pdf文件等功能,需要的朋友可以參考下2020-02-02python函數(shù)局部變量、全局變量、遞歸知識點總結(jié)
在本篇文章里小編給大家整理了關(guān)于python函數(shù)局部變量、全局變量、遞歸知識點,有興趣的朋友們學習參考下。2019-11-11利用ImageAI庫只需幾行python代碼實現(xiàn)目標檢測
這篇文章主要介紹了利用ImageAI庫只需幾行python代碼超簡實現(xiàn)目標檢測功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08