如果 none 的图像处理 python 库(Pillow 和 cv2)无法读取,如何解码这个二进制图像文件?

How to decode this binary image file if none of image processing python libraries (Pillow and cv2) are unable to read?

我正尝试在 python 中使用 Pillow 和 cv2 读取此文件。但是,这两个库都没有这样做。

文件 here 在 google 驱动器上。

Pillow 引发“OSError:无法识别图像文件 0.jpg” cv2 returns None

此二进制文件的扩展名为“.jpg”,可以使用 Window 的照片查看器轻松查看。

但是,我想读取这个二进制文件并将其解码为 python 中的图像。

有什么想法吗?

你的文件其实是一个JXR文件,可以看到前几个字节是:

49 49 BC

如果你将它加载到像 http://hexed.it

这样的十六进制编辑器中

签名是 IANA 注册的,参见 here


你可以像这样用 imagecodecs 阅读它:

import imagecodecs
from pathlib import Path

# Slurp entire image data as binary
jxr = Path('0.jpg').read_bytes()

# Make into Numpy array
na = imagecodecs.jpegxr_decode(jxr)

print(na.shape)        # prints (256, 512, 3)

或者,您可以在终端中使用 ImageMagick 将 JXR 转换为不那么微软的东西:

magick input.jxr output.jpg

或者,如果您有旧的 v6 ImageMagick,请使用:

convert input.jxr output.jpg