kussa 来回答 运动目标检测
来源:百度知道 编辑:UC知道 时间:2024/06/25 05:17:27
其实核心的就那么一句
cvAbsDiff(pFrameMat, pBkMat, pFrMat);
这点我给你在最初的帖子中就讲过了。在你提到的应用环境下(背景简单不变化),用当前帧(pFrameMat)减去背景帧pBkMat)得到的就是运动的图像(存入pFrMat),连续播放这些图像就是了。
这句代码的前面,是一些准备工作,如分配空间什么的,这些在注释中都有了。还有是在第一帧的时候提取背景信息存入pBkMat(认为此时运动物体未进入场景),就是下面这部分代码:
//如果是第一帧,需要申请内存,并初始化
if(nFrmNum == 1)
{
pBkImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);
pFrImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);
img = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);
pBkMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
pFrMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
pFrameMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
pFrHUMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
pFrCopyMat = cvCreateMat(pFrame->heig