#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().