C++ 将视频序列与OpenCV中的另一个视频交互播放
如何使用OpenCV将一个小视频序列添加到另一个视频C++ 将视频序列与OpenCV中的另一个视频交互播放,c++,visual-studio,opencv,image-processing,video-processing,C++,Visual Studio,Opencv,Image Processing,Video Processing,如何使用OpenCV将一个小视频序列添加到另一个视频 更详细地说,假设我有一个视频播放,它是交互式的,比如说用户观看视频时会做一些手势,在现有视频的底部或角落播放一个短序列。对于每一帧,您需要复制一个图像,其中包含视频帧内所需的内容。这些步骤是: 定义覆盖框架的大小 定义显示覆盖框架的位置 每帧 用一些内容填充覆盖图框架 在原始帧中定义的位置复制覆盖帧 这个小片段将在摄影机提要的右下角显示一个随机噪波覆盖窗口: #include <opencv2/opencv.hpp> using
更详细地说,假设我有一个视频播放,它是交互式的,比如说用户观看视频时会做一些手势,在现有视频的底部或角落播放一个短序列。对于每一帧,您需要复制一个图像,其中包含视频帧内所需的内容。这些步骤是:
#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;
}
#包括
使用名称空间cv;
使用名称空间std;
int main()
{
//视频捕获帧
Mat3b框架;
//覆盖框架
Mat3b覆盖框架(100200);
//初始化视频捕获
视频捕获上限(0);
//检查我们是否成功
如果(!cap.isOpened()){
瑟尔