gpt4 book ai didi

opencv - OpenCV 上的 VideoCapture 自动更新帧

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:11 25 4
gpt4 key购买 nike

我正在实现一种算法,该算法需要一个来自时刻 t 的视频帧和另一个来自时刻 t+1 的视频帧。看到几个例子,它似乎非常简单。我认为这会完美地工作:

VideoCapture cap(0);
Mat img1, img2;
while(1) {
cap >> img1; // instant t
cap >> img2; // instant t+1
imshow(img1 == img2);
}

但事实并非如此,图像是相同的,因为显示的图像 (img1 == img2) 是完全白色的,表明每个像素的值为 255。

我想也许我没有给相机足够的时间来捕捉第二帧,而我使用的是仍在缓冲区中的同一帧。我所做的很简单:

VideoCapture cap(0);
Mat img1, img2;
while(1) {
cap >> img1; // instant t

// I added 2.5 seconds between the acquisition of each frame
waitKey(2500);

cap >> img2; // instant t+1
waitKey(2500);
imshow(img1 == img2);
}

还是不行。为了确定,我添加了以下代码行:

VideoCapture cap(0);
Mat img1, img2;
while(1) {
cap >> img1; // instant t
imshow("img1", img1);
waitKey(2500); // I added 2.5 seconds between the acquisition of each frame

cap >> img2; // instant t+1

// Here I display both images after img2 is captured
imshow("img2", img2);
imshow("img1", img1);
waitKey(2500);
imshow(img1 == img2);
}

当我再次捕获 img1 后显示两个图像时,两个图像都发生了变化!我试过对不同的图像使用不同的 VideoCapture 对象,但这没有任何效果......

谁能告诉我我做错了什么?

谢谢,

人南

最佳答案

调用抓取器时(在您的情况下使用 >>> 运算符),OpenCV 仅发送对当前帧的引用。因此,img1 将指向帧缓冲区,当您调用 cap >> img2 时,两个图像都将指向最新的帧。保持单独图像的唯一方法是将它们存储在单独的矩阵中(即 img1.copyTo(myFirstImg)myFirstImg = img1.clone() 等)。

关于opencv - OpenCV 上的 VideoCapture 自动更新帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5867132/

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