您的位置:首页 > 运维架构

opencv 帧差法 absdiff

2016-03-11 09:52 531 查看

opencv 帧差法 absdiff

opencv2.3.1里的以下函数可计算当前帧与背景之差的绝对值。

cv::absdiff(backgroundImage,currentImage,foreground);

如果摄像机是固定的,那么我们可以认为场景(背景)大多数情况下是不变的,而只有前景(被跟踪的目标)会运动,这样就可以建立背景模型。通过比较当前帧和背景模型,就能轻松地跟踪目标运动情况了。这里,最容易想到的比较方式就是当前帧减去背景模型了

代码如下:

using namespace std;
using namespace cv;

int main(int argc,char * argv())
{
//读入视频
//VideoCapture capture("CarLights2.avi");
VideoCapture capture(0);
//namedWindow("camera",WINDOW_AUTOSIZE);
//namedWindow("moving area",WINDOW_AUTOSIZE);
Mat tempframe, currentframe, previousframe;
Mat frame;
int framenum = 0;
//读取一帧处理
while (true)
{
if(!capture.isOpened())
{
cout << "read video failure" << endl;
return - 1;
}
//tempframe = capture.read(frame);

capture >> frame;
tempframe = frame;
framenum++;
if (framenum == 1)
{
cvtColor(tempframe, previousframe, CV_BGR2GRAY);
}
if (framenum >= 2)
{
Mat currentframe1,currentframe2, currentframe3, currentframe4;
cvtColor(tempframe, currentframe, CV_BGR2GRAY);//转化为单通道灰度图,此时currentFrame已经存了tempFrame的内容
absdiff(currentframe,previousframe,currentframe);//做差求绝对值
threshold(currentframe, currentframe, 20, 255.0, CV_THRESH_BINARY);
dilate(currentframe, currentframe,Mat());//膨胀
erode(currentframe, currentframe,Mat());//腐蚀

//显示图像
imshow("camera", tempframe);
imshow("moving area", currentframe);

}
//把当前帧保存作为下一次处理的前一帧
//cvtColor(tempframe, previousframe, CV_BGR2GRAY);
waitKey(33);
}//end while
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息