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

Одно видео внутрь другого

Recommended Posts

Добрый день, работаю на opencv версии 3.3. Мне нужно сделать следующее, есть frame получаемый из камеры (условно 1280х720), нужно на данный frame наложить второй видеоролик, уже меньшего размера (условно, 300х300). Как мне это реализовать, подскажите пожалуйста. Спасибо!! Пишу на Си.

Наброски кода:

CvCapture* bigframe = cvCaptureFromCAM(0);

Cvcapture* smallframe=cvCreateFileCapture("1.avi");

CvMat* display;

cvNamedWindow("video", CV_WINDOW_AUTOSIZE);

while(1) {

display=cvQueryFrame(bigframe);

cvShowImage("video", display);

}

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


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

Используйте пожалуйста с++ инерфейс OpenCV. Со старым сишным больше возни, и многие, включая меня, уже его основательно забыли. 

А картинку в картинку вставить просто. Задаете область куда вставить, imgA.copyTo(imgB(Rect(x,y,w,h))),  (изображение должно иметь тот же размер и тип, как область изображения куда вставляем фрагмент) но это в новом интерфейсе.

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


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

Картинку в картинку знаю как, с этим проблем нет. А вот с видео проблемно уже, мне нужно одно видео внутрь другого нужно вставить

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


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

Так же как с картинками, считываете кадр из одного видео, из другого видео, вставляете как для изображений, записываете в результирующее видео, ну или отображаете кадр на экране, как обычно.

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


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

Хмммм, спасибо большое за ответ! Буду пробовать. Я думала, что он первый кадр только подхватывает, а не весь видеопоток. Я это представляю следующим образом, есть видео(frame) создаем элемент Mat и туда кидаем frame, как  то так CvMat *display =(cvSize(1280, 480), frame). А дальше выделяя область интереса копировать туда видео

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


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, Smorodov сказал:

Так же как с картинками, считываете кадр из одного видео, из другого видео, вставляете как для изображений, записываете в результирующее видео, ну или отображаете кадр на экране, как обычно.

Попробовала сделать как говорили, после этого у меня при запуске виснет и все. Вот набросанный код:

CvCapture* bigframe = cvCaptureFromCAM(0);

Cvcapture* smallframe=cvCreateFileCapture("1.avi");

CvMat* display;

CvMat* smallframe;

cvNamedWindow("video", CV_WINDOW_AUTOSIZE);

 

if(bigframe) {

for(;;) {

display=cvQueryFrame(bigframe);

}

cvSetImageROI(display,cRect(0,0,0,0));

cvCopy(smallframe,display,NULL);

cvResetImageROI(display);

cvShowImage("video", display);

}

 

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


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

эмм... насколько еще помню, надо создать маленькое изображение, ну или загрузить. И еще, почему область то нулевого размера ?

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


Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, Smorodov сказал:

эмм... насколько еще помню, надо создать маленькое изображение, ну или загрузить. И еще, почему область то нулевого размера ?

Размер области 0 просто для примера. Можно подробнее про маленькое изображение?

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


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

CvMat* smallframe; судя по всему тут пусто.

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×