我正在使用tensorflow,需要一种方法来通过numpy
获取图像文件(准确地说是jpg)的二进制内容。明确说明:
Tensorflow使用使用以下机制的tfrecords:
with tf.gfile.GFile(full_path, 'rb') as fid:
encoded_jpg = fid.read()
encoded_jpg_io = io.BytesIO(encoded_jpg)
image = PIL.Image.open(encoded_jpg_io)
encoded_jpg
为bytes
,而encoded_jpg_io
为_io.BytesIO
(根据文档,内存字节缓冲区)。
我想对实际图像进行一些转换,然后再将其插入tfrecord,并且我想使用numpy
。
如果我使用PIL读取图像:
im = Image.open(full_path)
image_np = np.array(image)
image_b = image_np.tobytes('F')
encoded_jpg_io2 = io.BytesIO(image_b)
image_b
也是bytes
,但它们与前一个bytes
不匹配。例如:
len(image_b)
2180388
len(encoded_jpg)
236244
另外,当我得到图像文件的二进制数据时,它取决于文件类型(这意味着如果图像是jpg,即使实际图像是相同的,它们也将不同于图像是png的情况)。
那么,有没有办法从numpy数组中的图像中获取将存储在图像文件中的实际二进制数据?
P.S。我知道我可以通过以下方法来解决该问题:加载原始图像,对其进行转换,将其保存到磁盘,然后将其读取为二进制,但是我对此方法不感兴趣。
P.S.2毕竟,这个问题与张量流无关。这就是为什么不包含标签的原因。