代码及注释仅供参考。
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;
DiffImageData_2