gpt4 book ai didi

opencv - OPENCV无法同时读取2个视频帧

转载 作者:行者123 更新时间:2023-12-02 17:52:22 24 4
gpt4 key购买 nike

我已经写了这段代码

while (true)
{
cv::Mat frame1,frame2,dst,temp;
if (!input_video.read(frame1))
{
fprintf(stderr, "Video has Finished .\n");
getchar();
return -1;
}
if (!input_video.read(frame2))
{
fprintf(stderr, "Video has Finished .\n");
getchar();
return -1;
}
cv::cvtColor(frame1,frame1,CV_RGB2GRAY) ;
cv::cvtColor(frame2,frame2,CV_RGB2GRAY) ;
cv::subtract(frame2,frame1,dst);
cv::imshow("F1",frame1);
cv::imshow("F2",frame2);
cv::imshow("dst",dst);
cv::waitKey();
}

当我读取视频(不是从摄像机而是从硬盘读取视频)时,frame1,frame2是相同的!

我不知道为什么“读取”方法为frame2返回相同的帧?因此,相减后的图像始终是空白图片!

我应该做一些特别的事情来同时读取连续的帧吗?
例如,每次我想阅读另一帧时,请使用此行到达该帧:
      input_video.set(CV_CAP_PROP_POS_FRAMES,current_frame+1);

如果是这样,还有另一种方法不这样做吗?

谢谢

最佳答案

函数input_video.read()不会在每次调用时创建新对象,而是返回cv::VideoCapture内部缓冲区的指针。对于这种情况,如果将第一帧复制到cv::Mat对象,则问题得到解决:

while (true)
{
cv::Mat frame,frame1,frame2,dst,temp;
if (!input_video.read(frame))
{
fprintf(stderr, "Video has Finished .\n");
getchar();
return -1;
}
frame.assignTo(frame1);
if (!input_video.read(frame))
{
fprintf(stderr, "Video has Finished .\n");
getchar();
return -1;
}
frame.assignTo(frame2);
cv::cvtColor(frame1,frame1,CV_RGB2GRAY) ;
cv::cvtColor(frame2,frame2,CV_RGB2GRAY) ;
cv::subtract(frame2,frame1,dst);
cv::imshow("F1",frame1);
cv::imshow("F2",frame2);
cv::imshow("dst",dst);
cv::waitKey();
}

关于opencv - OPENCV无法同时读取2个视频帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17627436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com