zoukankan      html  css  js  c++  java
  • 海思hi3516 ive运动目标检测简单实现

    在做车牌识别项目,通过先对识别区域内进行目标识别,能降低CPU的占用率,在检测到有运动目标的时候,再做车牌识别。

    //图像差分
     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) ", 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) ", 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) ", 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) ", 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 ",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分配的内存快,这个怎么解决?
  • 相关阅读:
    [转]tf.summary() 用法
    PASCAL VOC工具包解读
    [ERROR] 安装完Detectron后出现 cython_nms.so: undefined symbol: PyFPE_jbuf
    用Tensorflow做蝴蝶检测
    双系统,重装ubuntu后无法进入windows
    [Error]NodeDef mentions attr 'identical_element_shapes' not in Op<name=TensorArrayV3;
    [转]调试 smallcorgi/Faster-RCNN_TF 的demo过程遇到的问题
    js交互轮播图
    js取俩个数之间的随机数
    原生js实现触摸滚动轮播图
  • 原文地址:https://www.cnblogs.com/seacode/p/6709499.html
Copyright © 2011-2022 走看看