我有一个图像数据集,其中几个JPEG图像的字节流合并到一个二进制文件中。每个图像的字节偏移量和字节数是已知的,因此我使用以下代码片段进行读取:
import cv2
import numpy as np
def get_image(binary_file_path, byte_offset, buffer_size):
with open(binary_file_path, 'rb') as ifile:
ifile.seek(byte_offset)
image_buffer = np.asarray(bytearray(ifile.read(buffer_size)), np.uint8) # TOO SLOW
return cv2.imdecode(image_buffer, cv2.IMREAD_COLOR)
在我的机器上,标有“ TOO SLOW”注释的行大约需要50毫秒才能执行。相反,如果我使用cv2.imread
解析常规JPEG图像文件,则几乎不需要10毫秒。
值得注意的是:在上面的代码段中,读取字节花了50ms ,而cv2.imread
能够在10ms内读取文件并解码JPEG格式。< / p>
我真的很想知道这种巨大差异背后的原因。
P.S。上面提到的时间是在多处理池中运行代码(如果相关)时获得的。