Файл .bmp хранит не только необработанные пиксельные данные. Он начинается с заголовка, описывающего изображение, хранящееся в файле: ширина, высота, размер пикселя, тип цвета и т. Д. Написанная вами функция read_image()
читает весь файл, включая заголовок, и запускает любой алгоритм обработки изображения в ваш вектор испортит ваши данные и создаст мусор.
Если вы изучаете обработку изображений, было бы намного проще использовать необработанные файлы изображений. Необработанный файл изображения содержит только данные пикселей, без каких-либо метаданных. При работе с необработанным файлом изображения вы обязаны знать ширину и высоту изображения, а также кодировку пикселей.
Преобразование файла изображения в файл необработанного изображения и наоборот предполагает использование внешнего инструмента. ffmpeg - это такой инструмент. ffmpeg - это инструмент linux, но его легко найти, упакованный для любой операционной системы.
Для преобразования из файла практически любого формата в необработанный файл изображения (ffmpeg определяет размер изображения из входного файла). Порядок каждого параметра важен:
ffmpeg -i your_file.jpeg -f rawvideo -c rawvideo -pix_fmt gray output.raw
При конвертации обратно в ваш формат ввода вы должны явно указать ffmpeg размер вашей картинки. Опять важен порядок каждого параметра:
ffmpeg -f rawvideo -c rawvideo -pix_fmt gray -s 1280x720 -i input.raw your_processed_file.jpeg
Адаптируйте ширину и высоту к реальному размеру вашего изображения, иначе ffmpeg изменит размер изображения. Вы также можете поиграть с типом пикселя: gray
указывает формат серой шкалы 8 бит на пиксель, но вы можете использовать rgb24
для сохранения информации о цвете (используйте ffmpeg -pix_fmts
для просмотра списка всех доступных форматов).
Если вам посчастливилось иметь ffplay
в вашем пакете ffmpeg, вы можете просмотреть необработанный файл прямо на экране:
ffplay -f rawvideo -c rawvideo -pix_fmt gray -s 1280x720 input.raw
Кроме того, некоторые программы для обработки изображений могут открывать необработанный файл изображения: gimp, photoshop, ...