У меня действительно странная ошибка,
поэтому я пытаюсь прочитать изображение pgm, загрузив его значения пикселей в массив, я смог правильно прочитать его версию, высоту, ширину и максимально возможное значение пикселя. Однако, когда я начинаю читать значения пикселей, я всегда получаю 0. (Я знаю, что это не ноль, потому что я могу прочитать его, используя imread в matlab, но мне нужно реализовать его на c ++, плюс я не мог использовать библиотеку opencv так. .)
И кроме того, когда я читаю pgm-файл в виде NotePad ++, первые несколько строк хороши, представляя информацию об этом изображении, однако фактические значения пикселей не читаются. Мне интересно, нужен ли мне какой-то синтаксический анализ для чтения изображений в формате pgm? Его версия — p5.
Спасибо!
У вас должно быть задание для решения, так как в противном случае нет разумной причины для реализации считывателя PGM.
Существует два разных формата PGM: ASCII и двоичный. Кажется, вы ожидаете ASCII PGM, но у вас есть двоичный файл.
Посмотрите на спецификации: http://netpbm.sourceforge.net/doc/pgm.html
Это говорит:
/ 1. «Магическое число» для определения типа файла. ПГМ изображения
[…]
магическое число двух персонажейP5»./ 9. Растр высотных рядов в порядке сверху вниз. Каждый ряд
состоит из значений ширины серого в порядке слева направо. Каждый серый
значение — это число от 0 до Maxval, где 0 — черный, а Maxval —
быть белым. Каждое значение серого представлено в чистом двоичном виде либо
1 или 2 байта. Если Maxval меньше 256, это 1 байт.
В противном случае это 2 байта. Самый старший байт — первый.
Формат, который вы ожидаете, описан ниже как Обычный ПГМ формат. Его магическое число — «P2».
Других решений пока нет …