Ввод / вывод в Python значительно медленнее, чем в OpenCV - PullRequest
0 голосов
/ 18 июня 2019

У меня есть набор данных изображения, в котором поток байтов для нескольких изображений 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 Упомянутое выше время было получено при запуске кода из многопроцессорного пула, если это уместно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...