roboforum.ru

Технический форум по робототехнике.

Получение кадров с тв-тюнером в OpenCV

Получение кадров с тв-тюнером в OpenCV

ibn_maksimys » 23 ноя 2011, 21:30

Добрый день, Товарищи!

Столкнулся с проблемкой. Написал приложение (на основе библиотеки OpenCV), которое получает видео-данные с web-камеры. Все работает отлично.
Сейчас появилась необходимость получить данные с аналоговой камеры. Для видео-захвата использую тв-тюнер, но вот беда, написанная программа отказывается отображать корректно такого рода данные.

До этого программировал в Matlab. Там можно посмотреть список устройств видео-захвата. Аналоговая камера показывалась в списке доступных устройств.

Кто-нибудь сталкивался с подобной задачей?

Re: Получение кадров с тв-тюнером в OpenCV

noonv » 23 ноя 2011, 22:26

возможно придётся повозиться, но если под win32, то попробуйте videoInput
или же соберите отладочную версию OpenCV и зайдите в cvCreateCameraCapture, чтобы понять какой метод захвата пытается использовать библиотека.

Re: Получение кадров с тв-тюнером в OpenCV

=DeaD= » 23 ноя 2011, 22:56

Я нашел только такое решение - перед каждым запуском своей OpenCV-программы я запускал программу, которая шла с ТВ-тюнером и переключал его на правильный канал и тип входного сигнала + разрешение, после чего выключал её и включал свою программу, в этом случае изображение с ТВ-тюнера в нужном разрешении и формате шло как будто с вебкамеры.

Re: Получение кадров с тв-тюнером в OpenCV

Romeo » 23 ноя 2011, 23:06

Где-то 4 месяца назад пытался с тюнером работать. Куча нервов, бессонные ночи, но всё без толку. Даже к Direct обращался. В итоге решил пойти на обман. Программой OpenVideoCapture вывожу в окно изображение с тюнера, а программой на VisualC++ захватывал его из этого окна и переводил в тип cvImage. Далее дело техники.

Re: Получение кадров с тв-тюнером в OpenCV

ibn_maksimys » 25 ноя 2011, 11:05

Сейчас набросал тестовую программку, чтобы посмотреть содержимое CvCapture *capture.
Код: Выделить всёРазвернуть
#include "stdafx.h"
#include "conio.h"
#include "opencv/highgui.h"
#include "iostream"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{   CvCapture* capture = 0;
   capture = cvCreateCameraCapture(0);
   if(!capture){
      return -1;
   }
   IplImage *bgr_frame=cvQueryFrame(capture);
   cout << bgr_frame->depth;
   cout << bgr_frame->width;
   getch();
   return 0;
}

Web-камеры не подключены. Из устройств видео-захвата только tv-tuner.
Поставил BreakPoint. Содержимое capture посмотреть нельзя. Поэтому смотрю, что содержится а IplImage *bgr_frame:
nSize = 112
nChannels = 3
depth = 8
colorModel = "RGB"
channelSeq = "BGR"
align = 4
heigh = 4 (Вот тут я не пойму, почему высота 4, а не 480 например, как при подключении web-камеры)
width = 0
widthStep = 0

Таким образом, получается, что программа подхватывает видео-поток, но в нем содержится не то, что мне нужно. Не оцифрованное видео с композитного входа. Как бы изменить настройки тюнера, чтобы он выдавал то, что я от него жду.

Вариант, которые предложил =DeaD=, хоть и показался не технологичным, но даже он не сработал.
Romeo, это крайний случай, хочется, для начала, попробовать максимально технологичным путём получать изображение с tv-tuner'a.

Re: Получение кадров с тв-тюнером в OpenCV

sonderwolf » 22 авг 2014, 12:23

Прошу помощи у знающих! Помогите разобраться с видеозахватом. У меня USB ТВ-тюнер Compro VideoMate и аналоговая камера с композитным выходом. Фирменная программа тюнера отображает видео, а моя QT-прога с OpenCV не хочет:

CvCapture* capture = 0;
capture = cvCreateCameraCapture(0);
cvNamedWindow("capture", CV_WINDOW_AUTOSIZE);
IplImage *frame=cvQueryFrame(capture);
frame=cvQueryFrame(capture);
cvShowImage("capture", frame);

На экран выводится черный прямоугольник, хотя разрешение в переменной frame содержится правильное. Подскажите, где я ошибся?


Rambler\'s Top100 Mail.ru counter