1

Как добавить небольшую видеопоследовательность к другому видео с помощью OpenCV?Перемещение видеопоследовательности в другое видео в OpenCV

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

ответ

0

Для каждого кадра вам необходимо скопировать изображение с содержимым, которое вам нужно в видеокадре. Шаги:

  1. Определить размер наложения кадра
  2. Определите, где показать наложение кадр
  3. Для каждого кадра

    1. Наполните наложения кадра с некоторым содержанием
    2. Скопируйте оверлейный фрейм в определенном месте в исходном фрейме.

Этот небольшой фрагмент кода будет показывать случайный шум окно наложения на нижней правой части корма камеры:

#include <opencv2/opencv.hpp> 
using namespace cv; 
using namespace std; 


int main() 
{ 
    // Video capture frame 
    Mat3b frame; 
    // Overlay frame 
    Mat3b overlayFrame(100, 200); 

    // Init VideoCapture 
    VideoCapture cap(0); 

    // check if we succeeded 
    if (!cap.isOpened()) { 
     cerr << "ERROR! Unable to open camera\n"; 
     return -1; 
    } 

    // Get video size 
    int w = cap.get(CAP_PROP_FRAME_WIDTH); 
    int h = cap.get(CAP_PROP_FRAME_HEIGHT); 

    // Define where the show the overlay frame 
    Rect roi(w - overlayFrame.cols, h - overlayFrame.rows, overlayFrame.cols, overlayFrame.rows); 

    //--- GRAB AND WRITE LOOP 
    cout << "Start grabbing" << endl 
     << "Press any key to terminate" << endl; 
    for (;;) 
    { 
     // wait for a new frame from camera and store it into 'frame' 
     cap.read(frame); 

     // Fill overlayFrame with something meaningful (here random noise) 
     randu(overlayFrame, Scalar(0, 0, 0), Scalar(256, 256, 256)); 

     // Overlay 
     overlayFrame.copyTo(frame(roi)); 

     // check if we succeeded 
     if (frame.empty()) { 
      cerr << "ERROR! blank frame grabbed\n"; 
      break; 
     } 
     // show live and wait for a key with timeout long enough to show images 
     imshow("Live", frame); 
     if (waitKey(5) >= 0) 
      break; 
    } 
    // the camera will be deinitialized automatically in VideoCapture destructor 
    return 0; 
} 
Смежные вопросы