void CVisGradient::DoProcessing() { Uint8 * pInputImage = (Uint8*)m_iportInput.GetBuffer(); Uint8 * pGradientImage = (Uint8*)m_oportResult.GetBuffer(); // Use the IMGLIB for this. IMG_sobel( pInputImage, pGradientImage, m_unResultWidth, m_unResultHeight); }
void JSPreCtrl(int framenum) { int i,j,k,m,n; int thvalue; UINT8 *pImageCur,*pImageBK,*pImageBKTemp; //JSRunNextCounter(); //更新临时背景 用于对前后幁差计算 for(k=0;k<1;k++) { //m=2*JSgTargetCounterNow+k; m=k; memset(JSProX[m],0,sizeof(int)*TWIDTH); memset(JSProXDif[m],0,sizeof(int)*TWIDTH); memset(JSProXSobel[k],0,sizeof(int)*TWIDTH); memset(JSProXSobelLow[k],0,sizeof(int)*TWIDTH); pImageCur=JSpFrameCur[k]; pImageBK=JSFrameBK[k]; thvalue=25;//30 JSGetRectCor(k); //高速平滑 SmoothGauss(pImageCur+(JSy_up-1)*TWIDTH,TWIDTH,JSy_down-JSy_up+2,TWIDTH); //背景差 for(j=JSy_up;j<JSy_down;j++) { //n=j*TWIDTH+JSx_left; for(i=JSx_left;i<JSx_right;i++) { //if(abs(pImageCur[n]-pImageBKTemp[n++])>thvalue) if(abs(pImageCur[j*TWIDTH+i]-pImageBK[j*TWIDTH+i])>thvalue) { JSProX[m][i]++;//ProY[2*k][j]++; } } } //幁间差 if(JSgFrameCounter==0) pImageBKTemp=JSFrameBKTemp[2*9+k]; else pImageBKTemp=JSFrameBKTemp[2*(JSgFrameCounter-1)+k]; for(j=JSy_up;j<JSy_down;j++) { //n=j*TWIDTH+JSx_left; for(i=JSx_left;i<JSx_right;i++) { //if(abs(pImageCur[n]-pImageBKTemp[n++])>thvalue) if(abs(pImageCur[j*TWIDTH+i]-pImageBKTemp[(j-JSy_up)*TWIDTH+i])>20) { JSProXDif[m][i]++;//ProY[2*k][j]++; } } } IMG_sobel(pImageCur+JSy_up*TWIDTH,JSFrameTmp+JSy_up*TWIDTH,TWIDTH,JSy_down-JSy_up);//当前图像 寻找垂直边缘 for(j=JSy_up;j<JSy_down-2;j++)//sobel之后,少了后面2行的 { for(i=JSx_left;i<JSx_right;i++) { if(JSFrameTmp[j*TWIDTH+i]>50)//存在大边缘, { JSProXSobel[k][i]++; } if(JSFrameTmp[j*TWIDTH+i]>30)//存在微小边缘,用于辅助背景差(如果前景根本就没有边缘,则不认为是目标,马上当背景) { JSProXSobelLow[k][i]++; } } } //更新临时背景,即上一佂图像保存,用于计算佂间差 pImageBKTemp=JSFrameBKTemp[2*JSgFrameCounter+k]; for(j=JSy_up;j<JSy_down;j++) for(i=JSx_left;i<JSx_right;i++) { //pImageBKTemp2[j*TWIDTH+i]=pImageBKTemp[j*TWIDTH+i]; pImageBKTemp[(j-JSy_up)*TWIDTH+i]=pImageCur[j*TWIDTH+i]; } if(framenum==8) { UpdateBackGround(pImageCur,pImageBK,JSx_left,JSx_right,JSy_up,JSy_down,0); } } JSgFrameCounter++; if(JSgFrameCounter>9)JSgFrameCounter=0;//循环 }