Если у вас есть несколько десятков изображений, быстрый способ конвертировать их все в одноканальные изображения в оттенках серого, которые OpenCV может прочитать, - это ImageMagick в Терминале - он включен в большинство дистрибутивов Linux и доступно для macOS и Windows. Итак, чтобы сделать одноканальную 8-битную PGM версию всех PNG в текущем каталоге:
magick mogrify -format PGM -colorspace gray -depth 8 *.png
Если у вас много сотен или тысяч изображений, используйте GNU Parallel , чтобы все ядра вашего процессора работали параллельно:
parallel -X magick mogrify -format PGM -colorspace gray -depth 8 ::: *.png
ОДНАКО , я бы не советовал вам это делать, потому что есть много других вещей, о которых вам нужно подумать:
если ваши изображения содержат важные метаданные, вам нужно выбрать формат, в котором они сохраняются, а не PGM
если ваши изображения содержат данные пикселей с плавающей запятой, возможно, вам следует использовать формат TIFF
если ваша цель - сэкономить дисковое пространство (что кажется глупым в наше время почти свободного хранения), вы должны рассмотреть формат сжатия
если ваша цель - сэкономить ОЗУ, вам вообще может не потребоваться делать это, так как вы можете просто преобразовать свои изображения в одноканальные при загрузке, например, OpenCV imread(...cv2.IMREAD_GRAYSCALE)
Итак, вам нужно быть более ясным в отношении ваших данных и ваших целей. Также обратите внимание, что многие люди утверждают, что хотят сэкономить «память» , и они могут означать диск или ОЗУ.
Помните также, что PNG может сохранять 8- или 16-битные изображения, цветные или в оттенках серого, с палитрой или без нее (в зависимости от количества цветов), с которыми последующие приложения могут или не могут справиться.