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

How to detect if two successive video frames are identical or not?

本文关键字:的视频 连续 是否 何检测 检测 两个      更新时间:2023-10-16

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

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);

问题是所有视频帧的结果始终相等。我不知道错误在哪里。你能帮我吗?提前谢谢。

之后

previousFrame = currentFrame;

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

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

所以代替:

do {
capture >> currentFrame;

尝试:

do {
currentFrame = cv::Mat(width, height);
capture >> currentFrame;