1. 程式人生 > 程式設計 >PIL.Image.open和cv2.imread的比較與相互轉換的方法

PIL.Image.open和cv2.imread的比較與相互轉換的方法

摘要

PIL.Image.open讀入的是RGB順序,而opencv中cv2.imread讀入的是BGR通道順序 。cv2.imread會顯示圖片更藍一些。

cv2.imread(path,讀取方式)方法

第一個引數是圖片的路徑。

第二個引數是讀取方式:cv2.IMREAD_COLOR:讀入一副彩色圖片;cv2.IMREAD_GRAYSCALE:以灰度模式讀入圖片;cv2.IMREAD_UNCHANGED:讀入一幅圖片,幷包括其alpha通道。

預設為cv2.IMREAD_COLOR。

返回值是(height,width,channel)陣列,channel的順序是BGR順序。

例:

import cv2
from PIL import Image
imagePath='4.jpg'
import matplotlib.pyplot as plt
cvImage=cv2.imread(imagePath)
print(cvImage.shape)
plt.subplot(121)
plt.imshow(cvImage)
plt.show()

PIL.Image.open和cv2.imread的比較與相互轉換的方法

PIL.Image.open(path)方法

引數:圖片的路徑

返回值: <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=374x288 at 0x13EA15F7808>

需要用img=np.array(img)做轉換,才能看到shape屬性,是(height,width,channel)陣列,channel的通道順序為RGB。

例:

from PIL import Image

import numpy as np

imagePath='4.jpg'

import matplotlib.pyplot as plt

'''

cvImage=cv2.imread(imagePath)

print(cvImage.shape)

plt.subplot(121)

plt.imshow(cvImage)

plt.show()

'''

img=Image.open(imagePath)

img=np.array(img)

print(img.shape)

plt.imshow(img)

plt.show()

PIL.Image.open和cv2.imread的比較與相互轉換的方法

二者之間的相互轉化

主要用到的函式cv2.cvtColor(p1,p2) 是顏色空間轉換函式,p1是需要轉換的圖片,p2是轉換成何種格式。

本例用到的格式是cv2.COLOR_RGB2BGR和cv2.COLOR_BGR2RGB

程式碼:

def PILImageToCV(imagePath):
 # PIL Image轉換成OpenCV格式
 img = Image.open(imagePath)
 plt.imshow(img)
 img = cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR)
 plt.imshow(img)
 plt.show()

def CVImageToPIL(imagePath):
 # OpenCV圖片轉換為PIL image
 img = cv2.imread(imagePath)
 plt.imshow(img)
 img2 = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
 plt.imshow(img2)
 plt.show()

判斷影象資料是否是OpenCV格式:

isinstance(img,np.ndarray)

到此這篇關於PIL.Image.open和cv2.imread的比較與相互轉換的方法的文章就介紹到這了,更多相關PIL.Image.open和cv2.imread內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!