cvShowImage("video", pFrame);
cvShowImage("background", pBkImgTran); //显示背景
cvShowImage("foreground", pFrImgTran); //显示前景
//以上是每抓取一帧都要做的工作,下面进行危险检测
if (cvCountNonZero(pFrMatB) > 10000 && status == 0) //表示是第一帧的异物大于1W个像数点
{/* 则需要将当前帧存储为第一帧 */
pFrame1 = cvCloneImage(pFrame);
bg1 = cvCloneMat(pFrMat);
status = 1; //继续采集第2帧
}
else if (cvCountNonZero(pFrMatB) < 10000 && status == 1) // 表示第一帧的异物大于1W个像数点,而第二帧没有,则报警
{
printf("NO.%d warning!!!!\n\n",warningNum++);
status = 0;
}
else if (cvCountNonZero(pFrMatB) > 10000 && status == 1)// 表示第一帧和第二帧的异物都大于1W个像数点
{
pFrame2 = cvCloneImage(pFrame);
bg2 = cvCloneMat(pFrMat);
cvAbsDiff(bg1, bg2, pZeroMat);
cvThreshold(pZeroMat,pZeroMatB, 20, 1, CV_THRESH_BINARY);
if (cvCountNonZero(pZeroMatB) > 3000 ) //表示他们不连续,这样的话要报警
{
printf("NO.%d warning!!!!\n\n",warningNum++);
status = 0;
}
else
{
status = 2; //继续采集第3帧
}
}
else if (cvCountNonZero(pFrMatB) < 10000 && status == 2)//表示第一帧和第二帧的异物都大于1W个像数点,而第三帧没有
{
//报警
printf("NO.%d warning!!!!\n\n",warningNum++);
status = 0;
}
else if (cvCountNonZero(pFrMatB) > 10000 && status == 2)//表示连续3帧的异物都大于1W个像数点
{
pFrame3 = cvCloneImage(pFrame);
bg3 = cvCloneMat(pFrMat);
cvAbsDiff(bg2, bg3, pZeroMat);
cvThreshold(pZeroMat,pZeroMatB, 20, 1, CV_THRESH_BINARY);
if (cvCountNonZero(pZeroMatB) > 3000 ) //表示他们不连续,这样的话要报警