Питон 3.6.3
Как мне сделать следующее, не сохраняя и не загружая изображение снова и снова, есть ли способ преобразовать изображение между двумя форматами? (Позволяя мне загружать изображение только один раз в начале и сохранять один раз в конце.)
from PIL import Image
import cv2
import numpy as np
img = Image.open(r'C:\Users\Chris\Desktop\programs\pic.jpg')
#modify picture using PIL functions
img.save(r'C:\Users\Chris\Desktop\programs\pic.jpg')
img = cv2.imread("pic.jpg")
#modify picture using cv2 functions
cv2.imwrite("pic.jpg", img)
img = Image.open(r'C:\Users\Chris\Desktop\programs\pic.jpg')
#modify picture using PIL functions
img.save(r'C:\Users\Chris\Desktop\programs\pic.jpg)')
cv2.imread
просто не возвращает массив Numpy? Вы можете преобразовать массив Numpy в изображение PIL, используяImage.fromarray
, и вы можете преобразовать изображение PIL в массив Numpy, используяnp.asarray(img)
. Однако PIL использует порядок RGB, а cv2 использует порядок BGR, но это достаточно просто для обработки с помощью операций Numpy. - person PM 2Ring   schedule 11.12.2017cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
для изменения порядка цветовых каналов. Чтобы сделать это в Numpy, вы можете сделатьnp.flip(img, axis=-1)
который создает новое представление массиваimg
, так что это очень быстро. - person PM 2Ring   schedule 11.12.2017