我正在制作视频计算机视觉项目。我想检测任何两个连续的帧是否相同。这是我的代码。
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);
问题是所有视频帧的结果总是相等的。 我不知道错误在哪里。 你可以帮帮我吗 ?提前谢谢。
答案 0 :(得分:1)
在
previousFrame = currentFrame;
previousFrame和currentFrame都引用相同的值数组。
您需要在循环中创建一个新的cv :: Mat对象,以便每个捕获的帧都不会覆盖之前的那个。
所以而不是:
do {
capture >> currentFrame;
尝试:
do {
currentFrame = cv::Mat(width, height);
capture >> currentFrame;