Как преобразовать изображение между PIL и cv2 без ненужного сохранения/загрузки (Python 3.6.3)

Питон 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)')

person Chrisp    schedule 11.12.2017    source источник
comment
Я не использую cv2, но разве cv2.imread просто не возвращает массив Numpy? Вы можете преобразовать массив Numpy в изображение PIL, используя Image.fromarray, и вы можете преобразовать изображение PIL в массив Numpy, используя np.asarray(img). Однако PIL использует порядок RGB, а cv2 использует порядок BGR, но это достаточно просто для обработки с помощью операций Numpy.   -  person PM 2Ring    schedule 11.12.2017
comment
Связанный ответ использует cv2.cvtColor(img, cv2.COLOR_BGR2RGB) для изменения порядка цветовых каналов. Чтобы сделать это в Numpy, вы можете сделать np.flip(img, axis=-1) который создает новое представление массива img, так что это очень быстро.   -  person PM 2Ring    schedule 11.12.2017
comment
о, извините, я искал, но не нашел, должен ли я удалить этот пост, так как он дубликат? огромное спасибо   -  person Chrisp    schedule 11.12.2017
comment
Нет необходимости удалять этот вопрос: это может помочь будущему читателю найти связанный вопрос.   -  person PM 2Ring    schedule 11.12.2017