Резюме
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()