在作車牌識別項目,經過先對識別區域內進行目標識別,能下降CPU的佔用率,在檢測到有運動目標的時候,再作車牌識別。ide
//圖像差分
s32Ret = HI_MPI_IVE_Sub(&IveHandle, &pstGmm->stSrc, &pstGmm->stbgImg, &pstGmm->stBgDiffFg, &pstGmm->stSubCtrl, bInstant);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("HI_MPI_IVE_Sub fail,Error(%#x)\n", s32Ret);
return s32Ret;
}
//差分圖像二值化
s32Ret = HI_MPI_IVE_Thresh(&IveHandle, &pstGmm->stBgDiffFg, &pstGmm->stBinaryImg, &pstGmm->stThrCtrl, bInstant);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("HI_MPI_IVE_Thresh fail,Error(%#x)\n", s32Ret);
return s32Ret;
}
//腐蝕操做
s32Ret = HI_MPI_IVE_Erode(&IveHandle, &pstGmm->stBinaryImg, &pstGmm->stErodeImg, &pstGmm->stErodeCtrl, bInstant);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("HI_MPI_IVE_Erode fail,Error(%#x)\n", s32Ret);
return s32Ret;
}
//對二值化圖積分
s32Ret = HI_MPI_IVE_Integ(&IveHandle, &pstGmm->stErodeImg, &pstGmm->stDiffInteg, &pstGmm->stIntegCtrl, bInstant);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("HI_MPI_IVE_Integ fail,Error(%#x)\n", s32Ret);
return s32Ret;
}
pu64VirDataDiff = (HI_U32*)pstGmm->stDiffInteg.pu8VirAddr[0];
//計算識別區域內目標的像素點
//x1-y1
HI_U32 index = (g_recogArea.y+g_recogArea.height-1)*pstGmm->stInteg.u16Stride[0]+g_recogArea.x+g_recogArea.width-1;
HI_U32 sum_x1_y1 = (HI_U32) pu64VirDataDiff[index];
//HI_U32 sum_x1_y1 = (HI_U32) pu64VirDataDiff[pstGmm->stInteg.u16Height*pstGmm->stInteg.u16Stride[0]-1];
//x0-y0
index = g_recogArea.y*pstGmm->stInteg.u16Stride[0]+g_recogArea.x;
HI_U32 sum_x0_y0 = (HI_U32) pu64VirDataDiff[index]; // (HI_U32) pu64VirDataDiff[0];
//x0-y1
index = (g_recogArea.y+g_recogArea.height-1)*pstGmm->stInteg.u16Stride[0]+g_recogArea.x;
HI_U32 sum_x0_y1 = (HI_U32) pu64VirDataDiff[index];
//x1-y0
index =g_recogArea.y*pstGmm->stInteg.u16Stride[0]+g_recogArea.x+g_recogArea.width-1;
HI_U32 sum_x1_y0 = (HI_U32) pu64VirDataDiff[index];
HI_U32 motionArea = sum_x1_y1 + sum_x0_y0 - sum_x0_y1 - sum_x1_y0;
//printf("----------sum_x1_y1=%u---sum_x0_y0=%u----motionArea is %d ----number=%d\n",sum_x1_y1, sum_x0_y0, motionArea, sum_x1_y1);
//有運動目標
if(motionArea>300)
{
pstGmm->objectFlag = 3;
}else
{
if(pstGmm->objectFlag>0)
{
pstGmm->objectFlag--;
}
}
以上爲實現的代碼。
遇到一個問題,在海思hi3516上開發,malloc的內存進行操做比mmz分配的內存快,這個怎麼解決?