Aco*_*rbe 5 python performance opencv tar imread
我有一个.tar包含数百张图片的文件(.png).我需要通过opencv处理它们.
我想知道 - 出于效率原因 - 是否可以在不经过光盘的情况下处理它们.换句话说,我想从与tar文件相关的内存流中读取图片.
考虑一下
import tarfile
import cv2
tar0 = tarfile.open('mytar.tar')
im = cv2.imread( tar0.extractfile('fname.png').read() )
Run Code Online (Sandbox Code Playgroud)
最后一行不能正常工作,因为imread需要文件名而不是流.
考虑直接从tar流中读取这种方式可以例如针对文本实现(参见例如此SO问题).
有任何建议用正确的png编码打开流?
解包到ramdisk当然是一种选择,虽然我一直在寻找更多的东西可缓存.
感谢@abarry的建议和这个SO答案我找到了答案.
考虑以下
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 )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6077 次 |
| 最近记录: |