Dasha92 0 Report post Posted February 6, 2018 Добрый день, работаю на 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
Smorodov 579 Report post Posted February 6, 2018 Используйте пожалуйста с++ инерфейс OpenCV. Со старым сишным больше возни, и многие, включая меня, уже его основательно забыли. А картинку в картинку вставить просто. Задаете область куда вставить, imgA.copyTo(imgB(Rect(x,y,w,h))), (изображение должно иметь тот же размер и тип, как область изображения куда вставляем фрагмент) но это в новом интерфейсе. Share this post Link to post Share on other sites
Dasha92 0 Report post Posted February 6, 2018 Картинку в картинку знаю как, с этим проблем нет. А вот с видео проблемно уже, мне нужно одно видео внутрь другого нужно вставить Share this post Link to post Share on other sites
Smorodov 579 Report post Posted February 6, 2018 Так же как с картинками, считываете кадр из одного видео, из другого видео, вставляете как для изображений, записываете в результирующее видео, ну или отображаете кадр на экране, как обычно. Share this post Link to post Share on other sites
Dasha92 0 Report post Posted February 6, 2018 Хмммм, спасибо большое за ответ! Буду пробовать. Я думала, что он первый кадр только подхватывает, а не весь видеопоток. Я это представляю следующим образом, есть видео(frame) создаем элемент Mat и туда кидаем frame, как то так CvMat *display =(cvSize(1280, 480), frame). А дальше выделяя область интереса копировать туда видео Share this post Link to post Share on other sites
Dasha92 0 Report post Posted February 6, 2018 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
Smorodov 579 Report post Posted February 6, 2018 эмм... насколько еще помню, надо создать маленькое изображение, ну или загрузить. И еще, почему область то нулевого размера ? Share this post Link to post Share on other sites
Dasha92 0 Report post Posted February 6, 2018 5 минут назад, Smorodov сказал: эмм... насколько еще помню, надо создать маленькое изображение, ну или загрузить. И еще, почему область то нулевого размера ? Размер области 0 просто для примера. Можно подробнее про маленькое изображение? Share this post Link to post Share on other sites
Smorodov 579 Report post Posted February 6, 2018 CvMat* smallframe; судя по всему тут пусто. Share this post Link to post Share on other sites