Я не уверен, что понимаю, что вы пытаетесь сделать, но я думаю, что вы пытаетесь обработать изображение с помощью OpenCV, а затем заново вставить данные EXIF, которые вы потеряли, когда OpenCV открыл его ...
Итак, мы надеемся, что вы можете делать то, что вы уже делаете, но также открыть изображение с помощью PIL / Pillow и извлечь данные EXIF, а затем записать их в изображение, обработанное OpenCV.
from PIL import Image
import io
# Read your image with EXIF data using PIL/Pillow
imWithEXIF = Image.open('image.jpg')
Теперь у вас будет диктовка с информацией EXIF в:
imWIthEXIF.info['exif']
Теперь вы хотите записать данные EXIF в ваше изображение, которое вы обработали с помощью OpenCV, поэтому:
# Make memory buffer for JPEG-encoded image
buffer = io.BytesIO()
# Convert OpenCV image onto PIL Image
OpenCVImageAsPIL = Image.fromarray(OpenCVImage)
# Encode newly-created image into memory as JPEG along with EXIF from other image
OpenCVImageAsPIL.save(buffer, format='JPEG', exif=imWIthEXIF.info['exif'])
Осторожно ... В приведенном выше коде я предполагаю, что OpenCVImage
- это массив Numpy, и вы вызвали cvtColor(cv2.COLOR_BGR2RGB)
, чтобы перейти к обычному упорядочиванию каналов RGB, которое использует PIL, а не упорядочение каналов BGR OpenCV.
Ключевые слова : Python, OpenCV, PIL, Pillow, EXIF, сохранение, вставка, копирование, передача, изображение, обработка изображений, обработка изображений, dict, BytesIO, память, оперативная память, буфер.