ter_nk 0 Жалоба Опубликовано April 17, 2015 Читаю файл BMP 24-битный Mat m = imread("2.bmp", 1); c 54 байта в BMP начинаются данные Смотрю напримет так Vec3b v = m.at<Vec3b>(0,0); uchar u = v[0]; v[1] v[2] значения какая чушь в конце данные тоже другие смотрю m.data[0] и т.д. та же самая чушь Откуда эти данные и что это такое? Версия opencv 2.3.1 (на это есть причины) функция split дает ту же ерунду Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано April 17, 2015 1. Сделай дамп сырых данных из cv::Mat, а также удали заголовок из bmp. Насколько они похожи? 2. В bmp часто кладут, кроме заголовка и данных, палитру цветов. Ты уверен, что в твоём случае это не так? 3. В bmp часто картинки лежат как бы вверх ногами (по историческим причинам), то есть снача идёт последняя строка изображения, потом предпоследняя и т.д. Не исключено, что imread это учитывает и автоматически меняет порядок. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ter_nk 0 Жалоба Опубликовано April 17, 2015 Я смотрю в данные бмп после 54 байта и в конце, и то что мне мат возвращает, похожего нет вроде. Если там есть палитра цветов то она до 54 байта или она влияет на данные в Mat? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано April 17, 2015 Не помню уже. Ты же знаешь, почему именно 54 байта надо отступать? Потому что заголовок состоит из 2-х структур (в сумме их размер как раз 54): BITMAPINFOHEADER и BITMAPINFO. Вот их параметры и определяют, что там дальше лежит. Можешь считать в них 54 байта и показать результат? И в любом случае стоит выполнить geyrn (1) из моего предыдущего поста. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ter_nk 0 Жалоба Опубликовано April 17, 2015 В файл сохранить? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано April 17, 2015 Можно в файл, можно в консоль вывести - без разницы. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ter_nk 0 Жалоба Опубликовано April 17, 2015 вывел m.data в файл как width*heigth* 3, корреляции данных не замечаю. в файле bmp кроме этого еще 619 байт Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано April 17, 2015 Надеюсь, что выравнивания ты учёл при выводе. А как на счёт пункта (3) из моего первого поста? P.S. Вообще, тяжело заниматься телепатией вслепую. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ter_nk 0 Жалоба Опубликовано April 17, 2015 Смещение в шапке файл указано 54 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ter_nk 0 Жалоба Опубликовано April 17, 2015 \x42\x4D\x96\xE0 \x16\x00\x00\x00 \x00\x00\x36\x00 \x00\x00\x28\x00 \x00\x00\x89\x03 \x00\x00\x28\x02 \x00\x00\x01\x00 \x18\x00\x00\x00 \x00\x00\x60\xE0 \x16\x00\x00\x00 \x00\x00\x00\x00 \x00\x00\x00\x00 \x00\x00\x00\x00 \x00\x00\ вот это байт данных пошел xAB Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано April 17, 2015 Не вариант выложить сюда сам bmp? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ter_nk 0 Жалоба Опубликовано April 17, 2015 вот 17_3.bmp Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано April 17, 2015 Как я и писал в самом первом посте - пункт (3). То есть в файле обратный порядок строк: самая нижняя строка изображения записывается в самое начало файла. В подтверждение смотри картинку, на ней файл загружен в std::vector, смотрю на конец первой строки (905 * 3) и в конец куска памяти cv::Mat. Они совпадают. P.S. Если что, никогда не надо забывать про выравнивание строк по 4 байта. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ter_nk 0 Жалоба Опубликовано April 17, 2015 Спасибо, доразбираюсь в понедельник. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах