Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用opencv获取帧视频_C++_Opencv_Video Processing - Fatal编程技术网

C++ 使用opencv获取帧视频

C++ 使用opencv获取帧视频,c++,opencv,video-processing,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);

这是我从视频中获取帧的代码。我想在视频中显示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;
 }
int main(int argc,char**argv)
{    
string fileName=“E:\\Tugas Akhir\\Video Master\\city_1.avi”;
Mat图像1;
Mat图像2;
垫架;
cv::Mat结果;
视频捕获cap(文件名);
如果(!cap.isOpened())
返回-1;
垫边;
for(int-loop=0;loop++)
{

//std::cout这样的作业:

image1 = frame;
只进行浅层复制。复制Mat结构,共享像素

因此,在第二个示例中,您正在使用当前帧覆盖image1。如果要“缓存”垫,请使用:

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

像这样的任务:

image1 = frame;
只进行浅层复制。复制Mat结构,共享像素

因此,在第二个示例中,您正在使用当前帧覆盖image1。如果要“缓存”垫,请使用:

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

实际上,您所面临的是OpenCV Mat中重载的
=
运算符缺少对的支持。这基本上意味着
image1
frame
将共享它们的数据

一种方便的方法是,当您编写称为“浅层复制”的
image1=frame
时,您正在为Mat
frame
创建一个引用
image1
。因此,经过20次迭代后,当您显示
image1
时,实际上是在显示
frame
本身

如果您编写了类似于
image1=frame.clone()
,则不会出现这种情况,因为在这种情况下,您实际上是在制作
frame
的单独副本


另外,请查看。

您面临的问题本质上是OpenCV Mat中重载的
=
操作符缺乏支持。这基本上意味着
image1
frame
将共享它们的数据

一种方便的方法是,当您编写称为“浅层复制”的
image1=frame
时,您正在为Mat
frame
创建一个引用
image1
。因此,经过20次迭代后,当您显示
image1
时,实际上是在显示
frame
本身

如果您编写了类似于
image1=frame.clone()
,则不会出现这种情况,因为在这种情况下,您实际上是在制作
frame
的单独副本


另请查看。

不清楚您将要做什么。不清楚您将要做什么。此外,您可以使用Mat::copyTo()方法深度复制Mat。另一种方法是在原始Mat上使用任何操作(例如a=1.0*B;或a=B+0.0;将B中的数据复制到a)。此外,您还可以使用Mat::copyTo()深度复制Mat的方法。另一种方法是在原始Mat上使用任何操作(例如,a=1.0*B;或a=B+0.0;将B中的数据复制到a)。