У меня есть набор данных изображения, в котором поток байтов для нескольких изображений 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)
На моем компьютере строка, помеченная комментарием «СЛИШКОМ МЕДЛЕННО»занимает около 50 мс, чтобы выполнить.Напротив, если я использую cv2.imread
для анализа обычного файла изображения JPEG, это вряд ли займет 10 мс.
Стоит отметить: в приведенном выше фрагменте кода требуется только 50 мс для считывания байтов , тогда как cv2.imread
способен считывать файл и декодировать формат JPEG всего за 10 мс.
Мне бы очень хотелось узнать причину этого большого несоответствия.
PS Упомянутое выше время было получено при запуске кода из многопроцессорного пула, если это уместно.