Сравнение и взаимное преобразование PIL.Image.open и cv2.imread

искусственный интеллект

Резюме

PIL.Image.open читает в порядке RGB, а cv2.imread в opencv читает в порядке канала BGR. cv2.imread покажет, что картинка стала синее.

Метод cv2.imread(путь, метод чтения)

Первый параметр — это путь к изображению.

Второй параметр - метод чтения: cv2.IMREAD_COLOR: читать в цветном изображении, cv2.IMREAD_GRAYSCALE: читать в изображении в режиме оттенков серого, cv2.IMREAD_UNCHANGED: читать в изображении, включая его альфа-канал.

По умолчанию cv2.IMREAD_COLOR.

Возвращаемое значение представляет собой массив (высота, ширина, каналы), а порядок каналов соответствует порядку 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 (путь)

Параметры: путь к изображению

Возвращаемое значение:

Вам нужно использовать img=np.array(img) для преобразования, чтобы увидеть атрибут формы, который представляет собой массив (высота, ширина, канал), а порядок канала канала - 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_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()