jtl*_*lz2 5 python jpeg opencv exif python-imaging-library
我使用 Python OpenCV 创建了一个 JPEG,EXIF 数据在此过程中丢失,并且在调用 imwrite 时显然无法重新添加(参考:在 python 中使用 opencv 编辑时无法保留图像 exif 数据)。
两个问题:
一般来说,如何将原始 EXIF 数据/新的自定义元数据写入内存中而不是文件中的 JPEG 中?
Pillow/PIL 是否能够维护 EXIF 数据并允许添加补充元数据?截至 2013 年(参考:如何使用 PIL 维护图像的 exif 数据调整大小)这似乎不可能,除非通过 tmp 文件(这对我来说不是一个选项)。
一如既往的感谢
我不确定我是否理解您要做什么,但我认为您正在尝试使用 OpenCV 处理图像,然后重新插入 OpenCV 打开时丢失的 EXIF 数据...
所以,希望你可以做你已经在做的事情,但也可以用 PIL/Pillow 打开图像并提取 EXIF 数据,然后将其写入 OpenCV 处理的图像中。
from PIL import Image
import io
# Read your image with EXIF data using PIL/Pillow
imWithEXIF = Image.open('image.jpg')
Run Code Online (Sandbox Code Playgroud)
您现在将拥有一个包含 EXIF 信息的字典:
imWIthEXIF.info['exif']
Run Code Online (Sandbox Code Playgroud)
您现在想将该 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'])
Run Code Online (Sandbox Code Playgroud)
当心...我在上面的代码中假设,这OpenCVImage
是一个 Numpy 数组,并且您已调用cvtColor(cv2.COLOR_BGR2RGB)
PIL 使用的传统 RGB 通道排序,而不是 OpenCV 的 BGR 通道排序。
关键词:Python、OpenCV、PIL、枕头、EXIF、保留、插入、复制、传输、图像、图像处理、图像处理、字典、BytesIO、内存、内存中、缓冲区。
归档时间: |
|
查看次数: |
5354 次 |
最近记录: |