Визуализация OpenCV для понимания арифметики указателей

Я только изучаю OpenCV. В книге, которую я читаю, рекомендуется, чтобы для операций, в которых мне нужно касаться каждого пикселя, я использовал двойной цикл for с арифметикой указателя, stepWidth и т. д., чтобы переходить от одного к другому.

Мне трудно представить, как именно выглядит IplImage в памяти, это RGBRGB или RRRGGGBBB, все ли это числа, упаковывают ли они их в более крупные 32-битные изображения, если есть 8-битные изображения... и т. д. и т. д.

Кто-нибудь знает о визуальном или может объяснить основной способ распределения изображений OpenCV и какие типы данных идут куда? Я понимаю, что это зависит от того, пиксели или планировка и т. д., но было бы здорово увидеть визуально несколько примеров, обозначенных количеством байтов, чтобы иметь возможность лучше понять, как выполнять итерацию.

Благодарность!


person lollercoaster    schedule 24.11.2012    source источник
comment
Почему бы вам просто не распечатать шестнадцатеричный дамп памяти и не посмотреть, как он устроен?   -  person Kerrek SB    schedule 24.11.2012
comment
Именно так, и вы обнаружите, что упаковка пикселей по умолчанию для OpenCV на самом деле является BGR.   -  person karlphillip    schedule 24.11.2012
comment
это действительно хорошая идея. как мне распечатать шестнадцатеричный дамп изображения? будет ли это также показывать 000 для разделов памяти, которые не используются?   -  person lollercoaster    schedule 25.11.2012


Ответы (1)


Внутренний формат — 3x8 байт, по одному на каждый пиксель в порядке BGR.

строка0: BGR(столбец0) BGR(столбец1) .......

Если ширина изображения * 3 байта не кратна 4, следующая строка изображения будет начинаться со следующей 4-байтовой границы. Это связано с тем, что доступ к памяти обычно быстрее на 32-битных границах на большинстве современных машин.

См. Самый быстрый способ извлечения данных отдельных пикселей?

person Martin Beckett    schedule 24.11.2012