Jump to content
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);

}

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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);

}

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
5 минут назад, Smorodov сказал:

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×