C++ OpenCV逐帧视频拼接

C++ OpenCV逐帧视频拼接,c++,opencv,visual-c++,video-processing,opencv-stitching,C++,Opencv,Visual C++,Video Processing,Opencv Stitching,我试图缝合来自两个不同角度设置的不同摄像机的输入。为了将相机的输出(每个帧一个接一个)合并到单个帧中,我应该做什么 当我将输入作为之前录制的视频(“InputVideo1.mp4”和“InputVideo2.mp4”,如下所述)时,从视频输入生成的帧会缝合。但是,当我启用相机作为输入时,OpenCV Stitcher返回enum“ERR\u NEED\u MORE\u IMGS=1” //创建一个VideoCapture对象并打开输入文件 //视频捕获vCap(“InputVideo1.mp4”

我试图缝合来自两个不同角度设置的不同摄像机的输入。为了将相机的输出(每个帧一个接一个)合并到单个帧中,我应该做什么

当我将输入作为之前录制的视频(“InputVideo1.mp4”和“InputVideo2.mp4”,如下所述)时,从视频输入生成的帧会缝合。但是,当我启用相机作为输入时,OpenCV Stitcher返回enum“ERR\u NEED\u MORE\u IMGS=1”

//创建一个VideoCapture对象并打开输入文件
//视频捕获vCap(“InputVideo1.mp4”);
//视频捕获vCap1(“InputVideo2.mp4”);
//如果输入是网络摄像机,则传递0而不是视频文件名
视频捕获vCap(0);
视频捕获vCap1(1);
//检查摄像头是否成功打开
如果(!vCap.isOpened()){
cout框架1;
//如果框架为空,请立即断开
if(frame.empty()){

cout可能是图片是一样的。看一下这个图表: 现在我们看到,在注册块中,该方法查看两幅图像之间的特征并进行匹配,以便正确进行缝合。建议您在进行缝合之前检查是否导入了良好的图像,我看不到其他问题。除此之外,请检查

// Create a VideoCapture object and open the input file
//VideoCapture vCap("InputVideo1.mp4");
//VideoCapture vCap1("InputVideo2.mp4");

// If the input is the web camera, pass 0 instead of the video file name
VideoCapture vCap(0);
VideoCapture vCap1(1);

// Check if the camera opened successfully
if (!vCap.isOpened()) {
    cout << "Error opening video stream or file" << endl;
    return -1;
}
if (!vCap1.isOpened()) {
    cout << "Error opening video stream or file" << endl;
    return -2;
}

while (1) {

    Mat frame, frame1, finalFrame;

    // Capture frame-by-frame
    vCap >> frame;
    vCap1 >> frame1;

    // If the frame is empty, break immediately
    if (frame.empty()) {
        cout << "Frame is empty" << endl;
        break;
    }
    if (frame1.empty()) {
        cout << "Frame1 is empty" << endl;
        break;
    }

    // Display the resulting frame
    imshow("First frame", frame);
    imshow("Second frame", frame1);
    
    // Push each frame one by one into the final vector 
    vector<Mat> finalFrameImages;

    finalFrameImages.push_back(frame);
    finalFrameImages.push_back(frame1);


    // Stitch all frames that are stored the final frame images vector set
    Stitcher::Mode mode = Stitcher::PANORAMA;
    Ptr<Stitcher> stitcher = Stitcher::create(mode);
    Stitcher::Status status = stitcher->stitch(finalFrameImages, finalFrame);

    if (status != Stitcher::OK) {
        cout << "Can't stitch images" << endl;
        return status;
    }
    

    imshow("Resulting frame", finalFrame);

}