gpt4 book ai didi

python - 让 cv2.imread 从文件对象或类似内存流的数据中读取图像(这里是非提取的 tar)

转载 作者:太空狗 更新时间:2023-10-30 00:44:47 24 4
gpt4 key购买 nike

我有一个包含数百张图片 (.png) 的 .tar 文件。我需要通过 opencv 处理它们。

我想知道 - 出于效率原因 - 是否可以在不经过光盘的情况下处理它们。换句话说,我想从与 tar 文件相关的内存流中读取图片。

举个例子

 import tarfile
import cv2

tar0 = tarfile.open('mytar.tar')
im = cv2.imread( tar0.extractfile('fname.png').read() )

最后一行不起作用,因为 imread 需要文件名而不是流。

考虑到这种直接从 tar 流中读取的方式可以实现,例如对于文本(参见例如 this SO question )。


关于使用正确的 png 编码打开流有什么建议吗?

解压缩到 ramdisk 当然是一种选择,尽管我一直在寻找更可缓存的东西。

最佳答案

感谢@abarry 和this SO answer 的建议我设法找到了答案。

考虑以下问题

def get_np_array_from_tar_object(tar_extractfl):
'''converts a buffer from a tar file in np.array'''
return np.asarray(
bytearray(tar_extractfl.read())
, dtype=np.uint8)

tar0 = tarfile.open('mytar.tar')

im0 = cv2.imdecode(
get_np_array_from_tar_object(tar0.extractfile('fname.png'))
, 0 )

关于python - 让 cv2.imread 从文件对象或类似内存流的数据中读取图像(这里是非提取的 tar),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25186591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com