Некоторые веб-камеры выдают перевёрнутые кадры, как правило из-за кривых драйверов.
На данный момент программа определяет "перевёртышей" выполняя поиск лица в кадре средствами OpenCV, но так как вебка - не профессиональная зеркальная камера, на кадре могут быть помехи, в результате которых лицо может найтись и в перевёрнутом кадре.
Можно ли средствами vfwcap32 или DirectShow по каким-либо параметрам драйвера определить, что камера перевёрнута? Если да, - что это за параметры и какими функциями WinAPI к ним достучаться?
Когда-то сталкивался с подобной проблемой при использовании Qt и OpenCV в одной связке. Причём кадры "переворачивались" исключительно на Windows для одной и той же вебкамеры.
В Qt имеется класс QVideoSurfaceFormat
, который по перечислению Direction
позволяет определить направление для рисования кадра: сверху вниз или снизу вверх. В исходниках Qt для плагина DirectShow в файле directshowmediatype.cpp имеется следующий метод:
QVideoSurfaceFormat::Direction DirectShowMediaType::scanLineDirection(QVideoFrame::PixelFormat pixelFormat, const BITMAPINFOHEADER &bmiHeader)
{
/* MSDN http://msdn.microsoft.com/en-us/library/windows/desktop/dd318229(v=vs.85).aspx */
/* For uncompressed RGB bitmaps:
* if biHeight is positive, the bitmap is a bottom-up DIB with the origin at the lower left corner.
* If biHeight is negative, the bitmap is a top-down DIB with the origin at the upper left corner.
*
* For YUV bitmaps:
* the bitmap is always top-down, regardless of the sign of biHeight.
* Decoders should offer YUV formats with postive biHeight, but for backward compatibility they should accept YUV formats with either positive or negative biHeight.
*
* For compressed formats:
* biHeight must be positive, regardless of image orientation.
*/
switch (pixelFormat)
{
case QVideoFrame::Format_ARGB32:
case QVideoFrame::Format_RGB32:
case QVideoFrame::Format_RGB24:
case QVideoFrame::Format_RGB565:
case QVideoFrame::Format_RGB555:
return bmiHeader.biHeight < 0
? QVideoSurfaceFormat::TopToBottom
: QVideoSurfaceFormat::BottomToTop;
default:
return QVideoSurfaceFormat::TopToBottom;
}
}
Соответственно, если имеется доступ к структуре BITMAPINFOHEADER
, то вероятно можно определить, является ли кадр "перевёрнутым".
Виртуальный выделенный сервер (VDS) становится отличным выбором
Пытаюсь добиться от программы, чтобы она подсчитывала количество букв и словVisual Studio выводит ошибку, указывая на getche()
Программа выводит количество букв и словПочему, если ch = _getche() вынести из условия цикла в его тело, то в cout нужно указывать не chcount a (chcount - 1)?
При hover'e появляется панель с checkbox'oм, при нажатии на который панель фиксируется,а при снятии срабатывает hover