Зеркальное изображение при захвате с веб-камеры

Я захватываю изображения с веб-камеры, используя код, основанный на примере из http://msdn.microsoft.com/en-us/library/windows/desktop/dd407288(v=vs.85).aspx#example_code

Работает нормально, за исключением одной странности: изображение зеркально отражено по оси абсцисс, то есть сверху вниз (но не повернуто на 180 градусов).

Так как же это может произойти? Есть ли опция DirectShow, которая может вызвать такое поведение?


person Elmi    schedule 23.04.2013    source источник
comment
Зеркалирование включено на камере или ошибка в драйвере. Или ваш граф фильтров улавливает какие-то странные глючные фильтры сторонних производителей, которые изменяют изображение до его отображения.   -  person Roman R.    schedule 24.04.2013
comment
Удивительно, но это происходит с двумя очень разными камерами, так что я думаю, что это не проблема драйвера...   -  person Elmi    schedule 24.04.2013
comment
Может быть, это особенность, а не ошибка: какова ориентация изображения данных, возвращаемых SampleGrabber->GetCurrentBuffer()? Может там последняя строка стоит первой в памяти? Это объясняет, почему он ориентирован снизу вверх...   -  person Elmi    schedule 24.04.2013
comment
О, я думал, что это зеркально отражается вокруг другой оси...   -  person Roman R.    schedule 24.04.2013


Ответы (1)


Кадры RGB обычно имеют обратный порядок строк, снизу вверх. Правило:

  • RGB Pixel Formats
    • BITMAPINFOHEADER::biHeight > 0 - bottom-to-top rows
    • BITMAPINFOHEADER::biHeight ‹ 0 - строки сверху вниз
  • YUV Pixel Formats
    • regardless from BITMAPINFOHEADER::biHeight sign (both positive and negative are valid) - top-to-bottom rows

Хотя допустимы как положительные, так и отрицательные значения biHeight, отрицательные менее распространены и поддерживаются в меньшей степени. Многие фильтры просто отклоняют форматы с отрицательными значениями.

person Roman R.    schedule 24.04.2013