文章目录

  • 对单张图片进行处理
  • 对单个视频进行处理

对单张图片进行处理

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <semaphore.h>
#include <pthread.h>
#include <math.h>
#include "sample_comm_ive.h"//需要用到的文件和处理过程中的图片
typedef struct hiSAMPLE_IVE_TEST_S
{ IVE_SRC_IMAGE_S stSrc;       //input frameIVE_DST_IMAGE_S stDst;       //output frame FILE* pFpSrc;   //read from pFpSrcFILE* pFpDst;   //write to pFpDst
}SAMPLE_IVE_TEST_S;static SAMPLE_IVE_TEST_S s_stTest;//解除初始化,释放初始化时申请的内存
static HI_VOID SAMPLE_IVE_Test_Uninit(SAMPLE_IVE_TEST_S *pstTest)
{IVE_MMZ_FREE(pstTest->stSrc.au64PhyAddr[0], pstTest->stSrc.au64VirAddr[0]);IVE_MMZ_FREE(pstTest->stDst.au64PhyAddr[0], pstTest->stDst.au64VirAddr[0]);IVE_CLOSE_FILE(pstTest->pFpSrc);IVE_CLOSE_FILE(pstTest->pFpDst);
}//初始化,申请内存
static HI_S32 SAMPLE_IVE_Test_Init(SAMPLE_IVE_TEST_S *pstTest, HI_U32 u32Width, HI_U32 u32Height, HI_CHAR *pchSrcFileName, HI_CHAR *pchDstFileName)
{HI_S32 s32Ret;memset(pstTest, 0, sizeof(SAMPLE_IVE_TEST_S));s32Ret = HI_FAILURE;pstTest->pFpSrc = fopen(pchSrcFileName, "rb");SAMPLE_CHECK_EXPR_GOTO(NULL == pstTest->pFpSrc, TEST_INIT_FAIL, "Error,Open file %s failed!\n", pchSrcFileName);pstTest->pFpDst = fopen(pchDstFileName, "wb");SAMPLE_CHECK_EXPR_GOTO(NULL == pstTest->pFpDst, TEST_INIT_FAIL, "Error,Open file %s failed!\n", pchDstFileName);s32Ret = HI_SUCCESS;    s32Ret = SAMPLE_COMM_IVE_CreateImage(&(pstTest->stSrc), IVE_IMAGE_TYPE_U8C1, u32Width, u32Height);SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, TEST_INIT_FAIL, "Error(%#x),Create Src image failed!\n", s32Ret);s32Ret = SAMPLE_COMM_IVE_CreateImage(&(pstTest->stDst), IVE_IMAGE_TYPE_U8C1, u32Width, u32Height);SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, TEST_INIT_FAIL, "Error(%#x),Create Dst image failed!\n", s32Ret); TEST_INIT_FAIL:if (HI_SUCCESS != s32Ret){SAMPLE_IVE_Test_Uninit(pstTest);}return s32Ret;
}//以LBP举例,里面的具体参数的设置需要参考《 HI_IVE参考.pdf 》
static HI_S32 SAMPLE_IVE_Lbp(IVE_SRC_IMAGE_S *pstSrc, IVE_DST_IMAGE_S *pstDst)
{HI_S32 s32Ret;IVE_HANDLE IveHandle;    IVE_LBP_CTRL_S stCtrl;memset(&stCtrl,0,sizeof(IVE_LBP_CTRL_S));stCtrl.enMode = IVE_LBP_CMP_MODE_ABS;
//  stCtrl.enMode =IVE_LBP_CMP_MODE_NORMAL;stCtrl.un8BitThr.s8Val = 10;s32Ret = HI_MPI_IVE_LBP(&IveHandle, pstSrc, pstDst, &stCtrl, HI_FALSE);SAMPLE_CHECK_EXPR_RET(HI_SUCCESS != s32Ret,s32Ret,"Error(%#x),HI_MPI_IVE_Lbp failed!\n",s32Ret);return s32Ret;
}//主要处理过程的函数
static HI_S32 SAMPLE_IVE_TestProc(SAMPLE_IVE_TEST_S *pstTest)
{HI_S32 s32Ret = HI_SUCCESS;//读文件到图片格式中s32Ret = SAMPLE_COMM_IVE_ReadFile(&pstTest->stSrc, pstTest->pFpSrc);SAMPLE_CHECK_EXPR_RET(HI_SUCCESS != s32Ret,s32Ret,"Error(%#x),Read src1 file failed!\n",s32Ret);//做IVE处理s32Ret = SAMPLE_IVE_Lbp(&pstLbp->stSrc, &pstLbp->stDst);SAMPLE_CHECK_EXPR_RET(HI_SUCCESS != s32Ret,s32Ret,"Error(%#x),SAMPLE_IVE_Lbp failed!\n",s32Ret);//把处理完的结果写到文件中s32Ret = SAMPLE_COMM_IVE_WriteFile(&pstTest->stDst, pstTest->pFpDst);SAMPLE_CHECK_EXPR_RET(HI_SUCCESS != s32Ret,s32Ret,"Error(%#x),write file failed!\n",s32Ret);return s32Ret;
}HI_VOID SAMPLE_IVE_Test(HI_VOID)
{HI_S32 s32Ret = HI_SUCCESS;//图片格式信息和文件信息HI_U32 u32Width  = 1920;HI_U32 u32Height = 1080;HI_CHAR pchSrcFileName[500];HI_CHAR pchDstFileName[500];snprintf(pchSrcFileName, sizeof(pchSrcFileName), "./data/input/test/1920x1080.yuv");snprintf(pchDstFileName, sizeof(pchDstFileName), "./data/output/test/test.yuv");//初始化内存memset(&s_stTest,0,sizeof(s_stTest));//开启 MPISAMPLE_COMM_IVE_CheckIveMpiInit();//初始化s32Ret = SAMPLE_IVE_Test_Init(&s_stTest, u32Width, u32Height, pchSrcFileName, pchDstFileName);SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, TEST_FAIL, "Error(%#x),SAMPLE_IVE_Test_Init failed!\n", s32Ret);//处理s32Ret = SAMPLE_IVE_TestProc(&s_stTest);if (HI_SUCCESS == s32Ret){SAMPLE_PRT("Process success!\n");}//解除初始化SAMPLE_IVE_Test_Uninit(&s_stTest);memset(&s_stTest,0,sizeof(s_stTest));    TEST_FAIL:SAMPLE_COMM_IVE_IveMpiExit();
}

对单个视频进行处理

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <semaphore.h>
#include <pthread.h>
#include <sys/prctl.h>
#include "sample_comm_ive.h"#define SAMPLE_IVE_SFD_IMAGE_NUM 2typedef struct hiSAMPLE_IVE_SFD_S
{IVE_SRC_IMAGE_S astSrc[SAMPLE_IVE_SFD_IMAGE_NUM];   //input frameIVE_DST_IMAGE_S stDst;  //output frameFILE* pFpSrc;   //read from pFpSrcFILE* pFpDst;   //write to pFpDst
}SAMPLE_IVE_SFD_S;
static SAMPLE_IVE_SFD_S s_stSfd;static HI_VOID SAMPLE_IVE_Sfd_Uninit(SAMPLE_IVE_SFD_S *pstSfd)
{HI_U16 i;for (i = 0; i < 2; i++){IVE_MMZ_FREE(pstSfd->astSrc[i].au64PhyAddr[0], pstSfd->astSrc[i].au64VirAddr[0]);}IVE_MMZ_FREE(pstSfd->stDst.au64PhyAddr[0], pstSfd->stDst.au64VirAddr[0]);IVE_CLOSE_FILE(pstSfd->pFpSrc);IVE_CLOSE_FILE(pstSfd->pFpDst);
}static HI_S32 SAMPLE_IVE_Sfd_Init(SAMPLE_IVE_SFD_S *pstSfd, HI_U32 u32Width, HI_U32 u32Height, HI_CHAR *pchSrcFileName, HI_CHAR *pchDstFileName)
{HI_S32 s32Ret = HI_SUCCESS;HI_U16 i;memset(pstSfd, 0, sizeof(SAMPLE_IVE_SFD_S));for (i = 0; i < 2; i++){s32Ret = SAMPLE_COMM_IVE_CreateImage(&(pstSfd->astSrc[i]), IVE_IMAGE_TYPE_U8C1, u32Width, u32Height);SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, SFD_INIT_FAIL, "Error(%#x),Create src[%d] image failed!\n", s32Ret, i);}s32Ret = SAMPLE_COMM_IVE_CreateImage(&(pstSfd->stDst), IVE_IMAGE_TYPE_U8C1, u32Width, u32Height);SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, SFD_INIT_FAIL, "Error(%#x),Create stDst image failed!\n", s32Ret); s32Ret = HI_FAILURE;pstSfd->pFpSrc = fopen(pchSrcFileName, "rb");SAMPLE_CHECK_EXPR_GOTO(NULL == pstSfd->pFpSrc, SFD_INIT_FAIL, "Error,Open file %s failed!\n", pchSrcFileName);pstSfd->pFpDst = fopen(pchDstFileName, "wb");SAMPLE_CHECK_EXPR_GOTO(NULL == pstSfd->pFpDst, SFD_INIT_FAIL, "Error,Open file %s failed!\n", pchDstFileName);s32Ret = HI_SUCCESS;    SFD_INIT_FAIL:if (HI_SUCCESS != s32Ret){SAMPLE_IVE_Sfd_Uninit(pstSfd);}return s32Ret;
}//以LBP举例,里面的具体参数的设置需要参考《 HI_IVE参考.pdf 》
static HI_S32 SAMPLE_IVE_Lbp(IVE_SRC_IMAGE_S *pstSrc, IVE_DST_IMAGE_S *pstDst)
{HI_S32 s32Ret;IVE_HANDLE IveHandle;    IVE_LBP_CTRL_S stCtrl;memset(&stCtrl,0,sizeof(IVE_LBP_CTRL_S));stCtrl.enMode = IVE_LBP_CMP_MODE_ABS;
//  stCtrl.enMode =IVE_LBP_CMP_MODE_NORMAL;stCtrl.un8BitThr.s8Val = 10;s32Ret = HI_MPI_IVE_LBP(&IveHandle, pstSrc, pstDst, &stCtrl, HI_FALSE);SAMPLE_CHECK_EXPR_RET(HI_SUCCESS != s32Ret,s32Ret,"Error(%#x),HI_MPI_IVE_Lbp failed!\n",s32Ret);return s32Ret;
}static HI_S32 SAMPLE_IVE_SfdProc(SAMPLE_IVE_SFD_S *pstSfd)
{HI_S32 s32Ret = HI_SUCCESS;HI_U32 u32FrmNum;HI_S32 s32CurIdx = 0;HI_U32 u32TotalFrm = 200;for (u32FrmNum = 1; u32FrmNum < u32TotalFrm; u32FrmNum++){SAMPLE_PRT("Proc Frame %d/%d\n",u32FrmNum,u32TotalFrm);s32Ret = SAMPLE_COMM_IVE_ReadFile(&(pstSfd->astSrc[s32CurIdx]), pstSfd->pFpSrc);SAMPLE_CHECK_EXPR_RET(HI_SUCCESS != s32Ret,s32Ret,"Error(%#x),Read src1 file failed!\n",s32Ret);//做IVE处理s32Ret = SAMPLE_IVE_Lbp(&pstLbp->stSrc, &pstLbp->stDst);SAMPLE_CHECK_EXPR_RET(HI_SUCCESS != s32Ret,s32Ret,"Error(%#x),SAMPLE_IVE_Lbp failed!\n",s32Ret);s32Ret = SAMPLE_COMM_IVE_WriteFile(&pstSfd->stDst, pstSfd->pFpDst);s32CurIdx = 1 - s32CurIdx; //change cur image to last image}return s32Ret;
}HI_VOID SAMPLE_IVE_Sfd(HI_VOID)
{HI_S32 s32Ret = HI_SUCCESS;HI_U32 u32Width  = 1280;HI_U32 u32Height = 720;HI_CHAR pchSrcFileName[IVE_FILE_NAME_LEN];HI_CHAR pchDstFileName[IVE_FILE_NAME_LEN];snprintf(pchSrcFileName, sizeof(pchSrcFileName), "./data/input/sfd/1280x720.yuv");snprintf(pchDstFileName, sizeof(pchDstFileName), "./data/output/sfd/sfd.yuv");memset(&s_stSfd,0,sizeof(s_stSfd));SAMPLE_COMM_IVE_CheckIveMpiInit();s32Ret = SAMPLE_IVE_Sfd_Init(&s_stSfd, u32Width, u32Height, pchSrcFileName, pchDstFileName);SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, SFD_FAIL, "Error(%#x),SAMPLE_IVE_Sfd_Init failed!\n", s32Ret);s32Ret = SAMPLE_IVE_SfdProc(&s_stSfd);if (HI_SUCCESS == s32Ret){SAMPLE_PRT("Process success!\n");}SAMPLE_IVE_Sfd_Uninit(&s_stSfd);memset(&s_stSfd,0,sizeof(s_stSfd));    SFD_FAIL:SAMPLE_COMM_IVE_IveMpiExit();
}

海思IVE使用模板总结(FILE->IVE->FILE)相关推荐

  1. 海思IVE函数使用-1 (DMA使用 HI_MPI_IVE_DMA)

    海思IVE函数使用1 (DMA使用 HI_MPI_IVE_DMA) 1 结构体定义 //灰度图像定义 typedef struct {unsigned char *pu8Data; //虚拟地址uns ...

  2. 海思IVE遮挡报警算法(OD)

    大家越来越不喜欢分享了好像. 随便写写吧. OK , fine, 先看原处理线程 while (...){......s32Ret = HI_MPI_IVE_Integ(&IveHandle, ...

  3. 图像识别——强大的低功耗嵌入式AI方案海思Hi3519AV100介绍

    强大的低功耗嵌入式AI方案海思Hi3519AV100介绍 海思Hi3519AV100是2018年10月在北京安防展展会上第一次进入我们视线的,然后11月初北京一家公司委托我们先研究一下,并从代理拿到初 ...

  4. 海思3559万能平台:VGS的画线处理

    前言   海思的OSD功能除了之前提到的第三方库,自己的VGS也可以做到一些简单的诸如画线之类的操作,这里介绍下假如类似识别时需要画矩形框的时候可以的一种做法 海思VGS简介   海思的VGS 是视频 ...

  5. 52-20210322华为海思Hi3516DV300的linux系统编译(eMMC模式)1

    52-20210322华为海思Hi3516DV300的linux系统编译(eMMC模式) 2021/3/22 18:00 请严重注意: 本文所使用的的SDK是:Hi3516CV500R001C02SP ...

  6. 海思3559A sample的整体架构

    sample的整体架构 1.sample的整体架构: sample中有很多个例程,所以有很多个main函数,common是通用性的主题函数,我们分析的是sample_venc 2.基本的架构是:ven ...

  7. 12-20210225华为海思Hi3518EV300在鸿蒙系统下测试WIFI(AP+STATION模式)

    12-20210225华为海思Hi3518EV300在鸿蒙系统下测试WIFI(AP+STATION模式) 2021/2/25 10:45 [HarmonyOS HiSpark_IPC_DIY开发套件] ...

  8. 1.海思项目整理 编译烧录+启动参数+sample编译+bayeRGBYUV+MPP(VB+VI+VPSS)

    1.1.2.检测开发板 (4)SecureCRT监视打开,开发板开机,自动挂载到/home/aston/rootfs中 (5)自动加入/mnt中,执行./sample_venc即可 (6)在vlc中输 ...

  9. 51-20210316华为海思Hi3516DV300的linux系统编译1(SPI模式)

    51-20210316华为海思Hi3516DV300的linux系统编译 2021/3/16 10:42 https://xueqiu.com/7970718062/159110439 官井想开挖掘机 ...

  10. 56-20210402华为海思Hi3516DV300的linux系统下读取TF卡(eMMC模式)

    56-20210402华为海思Hi3516DV300的linux系统下读取TF卡(eMMC模式) 2021/4/2 15:02 https://xueqiu.com/7970718062/159110 ...

最新文章

  1. typescript调用javascript URI.js
  2. 显示一个数字到小数点后两位
  3. “贩卖”国潮新鲜感的花西子、完美日记们,能炒多久?
  4. Python中文处理(转)
  5. ARM指令寻址方式之: 内存访问指令寻址
  6. Spring Boot整合Spring Data Redis-整合步骤
  7. 42.递归算法---数的划分
  8. 为什么只看重结果_猫很现实?猫只是看重结果
  9. python爬取内容乱码_python爬取html中文乱码
  10. mybaties专题
  11. Mac 上如何使用“备忘录”管理扫描文稿?
  12. 琴岛学院计算机工程系怎么样,青岛理工大学琴岛学院计算机工程系学子荣获全国网络技术挑战赛二等奖...
  13. java assert 断言_Java 之 assert (断言)
  14. 网易2016在线笔试小结
  15. 图像的指纹——从自然图片到GAN
  16. 理解Anchor、RPN真值与预测量、RPN卷积网络
  17. 【玩转c++】多态深度刨析
  18. Gaze vector介绍
  19. Python 快速对比字符串的差异
  20. IntelliJ IDEA 2019从入门到癫狂

热门文章

  1. Android启动白屏问题完美解决
  2. iOS 修改tabBar frame
  3. Mixly简单实验触控式开关
  4. LVGL-GUI Guider生成工程移植Keil
  5. ipad稳定测试软件,让你的iPad变身为随身网络状况测试利器
  6. 4.1 IGRP的实现
  7. pstm.setString(2, passw);
  8. Jade ( Translucency / Subsurface Scattering ) Shader——玉石效果——SSS深度图实现
  9. JavaScript - 贷款计算器
  10. vue-cli3.0中Tslint配置