Перейти к содержимому
Compvision.ru
ter_nk

Неправильные RGB из Mat

Recommended Posts

Читаю файл 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 дает ту же ерунду

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Сделай дамп сырых данных из cv::Mat, а также удали заголовок из bmp. Насколько они похожи?

2. В bmp часто кладут, кроме заголовка и данных, палитру цветов. Ты уверен, что в твоём случае это не так?

3. В bmp часто картинки лежат как бы вверх ногами (по историческим причинам), то есть снача идёт последняя строка изображения, потом предпоследняя и т.д. Не исключено, что imread это учитывает и автоматически меняет порядок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я смотрю в данные бмп после 54 байта и в конце, и то что мне мат возвращает, похожего нет вроде.

Если там есть палитра цветов то она до 54 байта или она влияет на данные в Mat?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не помню уже. Ты же знаешь, почему именно 54 байта надо отступать? Потому что заголовок состоит из 2-х структур (в сумме их размер как раз 54): BITMAPINFOHEADER и BITMAPINFO. Вот их параметры и определяют, что там дальше лежит. Можешь считать в них 54 байта и показать результат?

И в любом случае стоит выполнить geyrn (1) из моего предыдущего поста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно в файл, можно в консоль вывести - без разницы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вывел m.data в файл как width*heigth* 3, корреляции данных не замечаю. в файле bmp кроме этого еще 619 байт

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Надеюсь, что выравнивания ты учёл при выводе.

А как на счёт пункта (3) из моего первого поста?

 

P.S. Вообще, тяжело заниматься телепатией вслепую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 \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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не вариант выложить сюда сам bmp?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как я и писал в самом первом посте - пункт (3). То есть в файле обратный порядок строк: самая нижняя строка изображения записывается в самое начало файла.

В подтверждение смотри картинку, на ней файл загружен в std::vector, смотрю на конец первой строки (905 * 3) и в конец куска памяти cv::Mat. Они совпадают.

 

P.S. Если что, никогда не надо забывать про выравнивание строк по 4 байта.

post-391-0-23019000-1429280828_thumb.png

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×