C++ 如何检测两个连续的视频帧是否相同?

C++ 如何检测两个连续的视频帧是否相同?,c++,computer-vision,video-capture,C++,Computer Vision,Video Capture,我正在做一个视频的计算机视觉项目。我想检测任何两个连续帧是否相同。这是我的密码 capture >> currentFrame; previousFrame = currentFrame; do{ capture >> currentFrame; cvtColor( currentFrame, g1, CV_BGR2GRAY ); cvtColor( previousFrame, g2, CV_BGR2GRAY ); cv::absdiff(g1,g2,diff); in

我正在做一个视频的计算机视觉项目。我想检测任何两个连续帧是否相同。这是我的密码

capture >> currentFrame;
previousFrame = currentFrame;
do{
capture >> currentFrame;
cvtColor( currentFrame, g1, CV_BGR2GRAY );
cvtColor( previousFrame, g2, CV_BGR2GRAY );
cv::absdiff(g1,g2,diff);
int eq = cv::countNonZero(diff);
if(eq ==0)
   cout<<"equal \n";
else 
   cout<<"not equal \n";
if (currentFrame.empty()){
shouldQuit = true; continue;
}
previousFrame = currentFrame;
} while (!shouldQuit);
捕获>>当前帧;
前一帧=当前帧;
做{
捕获>>当前帧;
CVT颜色(当前帧,g1,CV_bgr2灰色);
CVT颜色(上一帧,g2,CV_bgr2灰色);
cv::absdiff(g1、g2、diff);
int eq=cv::countNonZero(diff);
如果(等式=0)
术后cout

previousFrame和currentFrame都引用相同的值数组

您需要在循环中创建一个新的cv::Mat对象,以便每个捕获的帧不会覆盖之前的帧

因此,不是:

do {
capture >> currentFrame;
尝试:


currentFrame和previousFrame是什么类型的?我猜赋值会给这两个对象留下一个指向公共缓冲区的指针。@antlersoft它们是cv::Mat。
do {
capture >> currentFrame;
do {
currentFrame = cv::Mat(width, height);
capture >> currentFrame;