上一篇文章介绍有原理,本文给出参考代码,注意,这里的代码仅仅有参考意义,并没有考虑工程实际中的效率,内存耗费等问题,望谅解。
int CallTime = 0;//定义调用次数计数器
IplImage* BackGroundImage;//上一帧灰度图
IplImage* DiffImage_1;//上一帧差分图的二值化图
void ThreeFrmDiff(IplImage* pColorIn)
{
CallTime++;
if(CallTime > 10)//防止溢出
{
CallTime = 10;
}
CvSize ImageSize = cvSize(pColorIn->width,pColorIn->height);
IplImage* GrayImage = cvCreateImage(ImageSize,IPL_DEPTH_8U,1);//当前帧的灰度图
IplImage* GxImage = cvCreateImage(ImageSize,IPL_DEPTH_8U,1);//当前帧的X方向梯度图
IplImage* GyImage = cvCreateImage(ImageSize,IPL_DEPTH_8U,1);//当前帧的Y方向梯度图
IplImage* DiffImage = cvCreateImage(ImageSize,IPL_DEPTH_8U,1);//当前帧的差分图
IplImage* DiffImage_2 = cvCreateImage(ImageSize,IPL_DEPTH_8U,1);//前一帧差分图
IplImage* pyr = cvCreateImage(cvSize((ImageSize.width&-2)/2,(ImageSize.height&-2)/2),8,1); //进行腐蚀去除噪声的中间临时图片
uchar* DiffImageData_2;