эффективное хранение нескольких изображений в структуре данных Python

#python #image #algorithm #opencv #image-processing

#python #изображение #алгоритм #opencv #обработка изображений

Вопрос:

У меня есть несколько изображений (их количество может увеличиваться со временем) и соответствующие им аннотированные изображения — назовем их масками изображений.

Я хочу преобразовать исходные изображения в оттенки серого, а аннотированные маски — в двоичные изображения (черно-белые), а затем сохранить значения шкалы серого в файле Pandas DataFrame / CSV на основе координат черно-белых пикселей.

Таким образом, это означает много переключений между исходным изображением и двоичными изображениями.

Я не хочу каждый раз читать изображения из файла, потому что это может занять очень много времени.

Есть предложения, какую структуру данных следует использовать для хранения нескольких типов изображений в Python?

Ответ №1:

PIL и Pillow лишь незначительно полезны для этого типа работы.

Базовый алгоритм, используемый для «поиска и подсчета» объектов, подобных тем, которые вы пытаетесь сделать, выглядит примерно так: 1. Преобразование в оттенки серого 2. Установление пороговых значений (либо автоматически с помощью метода Otsu или аналогичного, либо путем ручной установки пороговых значений) 3. Определение контуров 4. Маскирование и подсчет объектов на основе ваших контуров.

Вы можете просто использовать Mat (из целых чисел, Mat1i), чтобы структура данных соответствовала этому сценарию.

Комментарии:

1. Как насчет словарей для хранения изображений, Images.BW [0:n], Изображения. Оттенки серого [0: n]. Для хранения значений пикселей (которых будет чертовски много) лучше использовать Mat, чем DataFrame?

2. да! словари тоже были бы лучшим вариантом. вы также можете использовать структуру данных на основе массива. @Roxanne

Ответ №2:

Я использовал несколько списков и list.append() для хранения изображения.

Для поиска белых областей на черно-белых изображениях я использовал cv2.findNonZero().