我正在使用 OpenCV243 开发一个项目,我需要在流中获取前景,我的问题是我使用 cv::absdiff 来获取它并没有真正帮助,这是我的代码和结果。
#include <iostream>
#include<opencv2\opencv.hpp>
#include<opencv2\calib3d\calib3d.hpp>
#include<opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
int main (){
cv::VideoCapture cap(0);
cv::Mat frame,frame1,frame2;
cap >> frame;
frame.copyTo(frame1);
cv::imwrite("background.jpeg",frame1);
int key = 0;
while(key!=27){
cap >> frame;
cv::absdiff(frame, frame1, frame2); // frame2 = frame -frame1
cv::imshow("foreground", frame2);
if(key=='c'){
//frame.copyTo(frame2);
cv::imwrite("foreground.jpeg", frame2);
key = 0;
}
cv::imshow("frame",frame);
key = cv::waitKey(10);
}
cap.release();
return 0;
}
正如您所看到的减法工作,但我想要得到的只是改变的值,例如,如果背景中有一个像素为 [130,130,130]并且同一像素在框架中有[200,200,200] 我想得到完全最后一个值而不是[70,70,70] 我已经看过本教程:http ://mateuszstankiewicz.eu/?p=189 但我无法理解代码,并且我在设置 cv::BackgroundSubtractorMOG2 时遇到问题openCV 版本
提前感谢您的帮助