c++ - 用opencv获取帧视频

标签 c++ opencv video-processing

这是我从视频中获取帧的代码。我想在带有循环和条件的视频中显示 2 帧。

    int main( int argc, char** argv )
    {    

    string fileName = "E:\\Tugas Akhir\\Video Master\\city_1.avi";
    Mat image1;
    Mat image2;
    Mat frame;
    cv::Mat result;
    VideoCapture cap(fileName); 
    if(!cap.isOpened())  
        return -1;

    Mat edges;
    for(int loop=0;;loop++)
    {
        //std::cout<<loop<<endl;
        cap >> frame; // get a new frame from camera
        if(loop>0 && (loop%20)==0){             
            //std::cout<<"frame 2"<<endl;
            image2=frame;                               
            **imshow("image2",image2);**
            break;      
        }else if(loop==0){          
            image1=frame;
            **imshow("image1",image1);**
            //std::cout<<"frame 1"<<endl;

        }
        //loop++;


        if(waitKey(30) >= 0) break;
    }


 waitKey(0);
 return 0;
 }

这是结果,2 个窗口有 2 个不同的图像

enter image description here

但是当我改变 imshow("image1",image1) 方法位置时......

           if(loop>0 && (loop%20)==0){              
            //std::cout<<"frame 2"<<endl;
            image2=frame;

            **imshow("image1",image1);**
            **imshow("image2",image2);**
            break;      
        }else if(loop==0){          
            image1=frame;

            //std::cout<<"frame 1"<<endl;

        }

image1 窗口显示与 image2 相同的图片, enter image description here

我不知道为什么会显示奇怪的结果,请告诉我如何解决,谢谢

最佳答案

这样的作业:

image1 = frame;

只进行复制。 Mat 结构被复制,像素被共享

因此,在您的第二个示例中,您将用当前帧覆盖 image1。如果你想“缓存”Mats,使用:

image1 = frame.clone(); // deep copy

关于c++ - 用opencv获取帧视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23190704/

相关文章:

c++ - 类 draw() 方法在直接调用时有效,但在被另一个对象调用时崩溃

c++ - 使用父成员的 decltype 不在 MSVC 上的 lambda 内部工作

c++ - 如何从 void 指针访问结构中的属性?

ffmpeg 选择过滤器开始时间?

react-native - 如何防止 native react 中的屏幕 sleep

swift - 使用 opencv : UIImage too slow 实时处理 ARkit 帧

C++ 文件 IO - ASCII 值而不是二进制值

python-2.7 - Python 2.7 和 Opencv 3.0.0 cvtColor 不适用于 BGR/RGB 转换

python - 使用 cv2/pytesseract 增强数字识别的局部对比度

image-processing - 将嘈杂的硬币 reshape 为圆形