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。

返回值是(heightwidthchannel)數組,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(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()

 

二者之間的相互轉化

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

本例用到的格式是cv2.COLOR_RGB2BGRcv2.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()

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章