ax_npu_imgproc.h 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731
  1. /**********************************************************************************
  2. *
  3. * Copyright (c) 2019-2020 Beijing AXera Technology Co., Ltd. All Rights Reserved.
  4. *
  5. * This source file is the property of Beijing AXera Technology Co., Ltd. and
  6. * may not be copied or distributed in any isomorphic form without the prior
  7. * written consent of Beijing AXera Technology Co., Ltd.
  8. *
  9. **********************************************************************************/
  10. #ifndef __AX_NPU_IMGPROC_H__
  11. #define __AX_NPU_IMGPROC_H__
  12. #include "./npu_common.h"
  13. #include "ax_interpreter_external_api.h"
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. /*!
  18. * 函数功能描述:
  19. * <br/>获取 NPU-CV KIT 版本号。
  20. */
  21. const AX_S8* AX_NPU_CV_Version();
  22. /*!
  23. * 函数功能描述:
  24. * <br/>实现图像的 Crop 操作。为了高效灵活的使用,支持同时从src图像中处理多个子图,支持选择虚拟NPU模式类别
  25. * \warning 支持处理:NV12/NV21/BGR/RGB/GRAY;支持4K分辨率。
  26. * \param eVirtualNpuMode: 虚拟NPU模式类别
  27. * \param pSrc: src图像指针
  28. * \param nDestSize: 子图数量
  29. * \param pDestImages: dst图像指针数组,可以同时输出多个结果
  30. * \param pBoxes: 各子图bounding box指针数组,NV12/NV21需要fW、fH为偶数。如果`pBoxes[i]`或`pBoxes`为空则表示不做crop操作。
  31. */
  32. int AX_NPU_CV_CropImage(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  33. const AX_NPU_CV_Image* pSrc,
  34. const AX_U32 nDestSize,
  35. AX_NPU_CV_Image** pDestImages,
  36. AX_NPU_CV_Box** pBoxes);
  37. typedef enum _AX_NPU_CV_ImageResizeAlignParam {
  38. AX_NPU_CV_IMAGE_FORCE_RESIZE = 0, // without keep aspect ratio, others keep aspect ratio
  39. AX_NPU_CV_IMAGE_HORIZONTAL_LEFT = 1, // border on the right of the image
  40. AX_NPU_CV_IMAGE_HORIZONTAL_CENTER = 2, // border on both sides of the image
  41. AX_NPU_CV_IMAGE_HORIZONTAL_RIGHT = 3, // border on the left of the image
  42. AX_NPU_CV_IMAGE_VERTICAL_TOP = AX_NPU_CV_IMAGE_HORIZONTAL_LEFT, // border on the bottom of the image
  43. AX_NPU_CV_IMAGE_VERTICAL_CENTER = AX_NPU_CV_IMAGE_HORIZONTAL_CENTER, // border on both sides of the image
  44. AX_NPU_CV_IMAGE_VERTICAL_BOTTOM = AX_NPU_CV_IMAGE_HORIZONTAL_RIGHT, // border on the top of the image
  45. } AX_NPU_CV_ImageResizeAlignParam;
  46. /*!
  47. * 函数功能描述:
  48. * <br/>实现crop然后在保持纵横比的前提下,从给定的图像resize为相同的形状。
  49. * <br/>支持选择虚拟NPU模式类别。
  50. * \warning 支持处理:NV12/NV21/BGR/RGB/GRAY;支持4K分辨率;水平或垂直方向缩小比例要小于32。
  51. * \warning 在较大输入/输出分辨率场景,可能会触发硬件限制条件,报错时会打印详细参数信息。
  52. * \param eVirtualNpuMode: 虚拟NPU模式类别
  53. * \param pSrc: src图像指针,支持配置宽度方向stride,若为0则默认stride为宽度大小
  54. * \param nDestSize: 子图数量
  55. * \param pDestImages: dst图像指针数组,可以同时输出多个结果,但图像shape相同;支持配置宽度方向stride,若为0则默认stride为宽度大小
  56. * \param pBoxes: 各子图bounding_box指针数组,NV12/NV21/RGB/BGR需要fW、fH为偶数。如果`pBoxes[i]`或`pBoxes`为空则表示不做crop操作
  57. * \param eImageResizeAlignParamHorizontal: 输出图像水平对齐方式
  58. * \param eImageResizeAlignParamVertical: 输出图像纵向对齐方式
  59. * \param tColor: 用于按指定颜色填充border
  60. */
  61. int AX_NPU_CV_CropResizeImage(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  62. const AX_NPU_CV_Image* pSrc,
  63. const AX_U32 nDestSize,
  64. AX_NPU_CV_Image** pDestImages,
  65. AX_NPU_CV_Box** pBoxes,
  66. const AX_NPU_CV_ImageResizeAlignParam eImageResizeAlignParamHorizontal,
  67. const AX_NPU_CV_ImageResizeAlignParam eImageResizeAlignParamVertical,
  68. const AX_NPU_CV_Color tColor);
  69. /*!
  70. * 函数功能描述:
  71. * <br/>实现Y和UV分离的扣图和缩放操作,从给定的图像resize为相同的形状。
  72. * <br/>输入/输出图像尺寸、stride以及box坐标需要设置为偶数。
  73. * <br/>支持选择虚拟NPU模式类别。
  74. * \warning 支持处理Y和UV分离的NV12/NV21图像;支持4K分辨率;水平或垂直方向缩小比例要小于32。
  75. * \warning 在较大输入/输出分辨率场景,可能会触发硬件限制条件,报错时会打印详细参数信息。
  76. * \param eVirtualNpuMode: 虚拟NPU模式类别
  77. * \param pSrcY: 输入Y图像指针,支持配置宽度方向stride,若为0则默认stride为宽度大小
  78. * \param pSrcUV: 输入UV图像指针,图像宽度、高度和stride与输入Y图像保持一致
  79. * \param nDestSize: 子图数量
  80. * \param pDestImagesY: 输出Y图像指针数组,可以同时输出多个结果,但图像shape相同;支持配置宽度方向stride,若为0则默认stride为宽度大小
  81. * \param pDestImagesUV: 输出UV图像指针数组,可以同时输出多个结果,但图像shape相同;输出UV图像宽度、高度和stride与输出Y图像保持一致
  82. * \param pBoxes: 各子图bounding_box指针数组,要求fW、fH为偶数。如果`pBoxes[i]`为空则表示不做crop操作
  83. * \param eImageResizeAlignParamHorizontal: 输出图像水平对齐方式
  84. * \param eImageResizeAlignParamVertical: 输出图像纵向对齐方式
  85. * \param tColor: 用于按指定颜色填充border
  86. */
  87. int AX_NPU_CV_CropResizeImageForSplitYUV(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  88. const AX_NPU_CV_Image* pSrcY,
  89. const AX_NPU_CV_Image* pSrcUV,
  90. const AX_U32 nDestSize,
  91. AX_NPU_CV_Image** pDestImagesY,
  92. AX_NPU_CV_Image** pDestImagesUV,
  93. AX_NPU_CV_Box** pBoxes,
  94. const AX_NPU_CV_ImageResizeAlignParam eImageResizeAlignParamHorizontal,
  95. const AX_NPU_CV_ImageResizeAlignParam eImageResizeAlignParamVertical,
  96. const AX_NPU_CV_Color tColor);
  97. /*!
  98. * 定义 AX_NPU_CV_AlphaBlendingWithMask 算子上下文
  99. */
  100. typedef AX_VOID* AX_NPU_CV_AlphaBlendingContext;
  101. /*!
  102. * 函数功能描述:
  103. * <br/>实现前景和背景为NV12/NV21/BGR/RGB的图像按Gray Mask做blending操作。
  104. * <br/>背景图为整图,前景图可以只和背景图部分区域相对应,此时需要指定前景图相对背景图区域的偏移坐标。
  105. * <br/>blending功能完成后将结果overlay到背景图相应区域。
  106. * \warning 背景图做blending区域不能超出图像实际范围。
  107. * \warning 程序退出前,需要调用 AX_NPU_CV_DestroyAlphaBlendingContext 释放算子上下文。
  108. * \param pContext: 算子上下文指针。如果 `*pContext` 为空指针, 算子内部会自动分配内存。
  109. * \param eVirtualNpuMode: 虚拟NPU模式类别
  110. * \param pBackground: 背景图像指针,支持NV12/NV21/BGR/RGB
  111. * \param pForeground: 前景图像指针,支持NV12/NV21/BGR/RGB,色彩空间与背景图一致
  112. * \param pMask: Gray图像指针,Mask图像宽、高与前景图宽、高不一致时,算子内部会resize到一致。alpha值范围为[0,128]来表示小数[0,1]。
  113. * \param nOffsetW: 指定背景图blending区域起始位置宽度
  114. * \param nOffsetH: 指定背景图blending区域起始位置高度
  115. */
  116. int AX_NPU_CV_AlphaBlendingWithMask(AX_NPU_CV_AlphaBlendingContext* pContext,
  117. const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  118. AX_NPU_CV_Image* pBackground, const AX_NPU_CV_Image* pForeground,
  119. const AX_NPU_CV_Image* pMask, AX_U32 nOffsetW, AX_U32 nOffsetH);
  120. /*!
  121. * 函数功能描述:
  122. * <br/>实现前景和背景为NV12/NV21/BGR/RGB的图像按Gray Mask做blending操作。
  123. * <br/>背景图为整图,前景图可以只和背景图部分区域相对应,此时需要指定前景图相对背景图区域的偏移坐标。
  124. * <br/>blending功能完成后将结果输出到目标地址相应区域。
  125. * \warning 背景图做blending区域不能超出图像实际范围。
  126. * \warning 程序退出前,需要调用 AX_NPU_CV_DestroyAlphaBlendingContext 释放算子上下文。
  127. * \param pContext: 算子上下文指针。如果 `*pContext` 为空指针, 算子内部会自动分配内存。
  128. * \param eVirtualNpuMode: 虚拟NPU模式类别
  129. * \param pBackground: 背景图像指针,支持NV12/NV21/BGR/RGB
  130. * \param pForeground: 前景图像指针,支持NV12/NV21/BGR/RGB,色彩空间与背景图一致
  131. * \param pMask: Gray图像指针,Mask图像宽、高与前景图宽、高不一致时,算子内部会resize到一致。alpha值范围为[0,128]来表示小数[0,1]。
  132. * \param pDst: 输出图像指针,支持NV12/NV21/BGR/RGB
  133. * \param nOffsetW: 指定背景图blending区域起始位置宽度
  134. * \param nOffsetH: 指定背景图blending区域起始位置高度
  135. */
  136. int AX_NPU_CV_AlphaBlendingWithMaskV2(AX_NPU_CV_AlphaBlendingContext* pContext,
  137. const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  138. const AX_NPU_CV_Image* pBackground, const AX_NPU_CV_Image* pForeground,
  139. const AX_NPU_CV_Image* pMask, AX_NPU_CV_Image* pDst, AX_U32 nOffsetW, AX_U32 nOffsetH);
  140. /*!
  141. * 函数功能描述:
  142. <br/>销毁 AX_NPU_CV_AlphaBlendingWithMask 算子上下文
  143. * \param tContext: AX_NPU_CV_AlphaBlendingWithMask 算子上下文
  144. */
  145. void AX_NPU_CV_DestroyAlphaBlendingContext(AX_NPU_CV_AlphaBlendingContext tContext);
  146. /*!
  147. * 函数功能描述:
  148. <br/>实现不同色彩空间转换
  149. <br/>|++ from +++|++ to +++|
  150. <br/>NV12/NV21==>>BGR/YUV444/LAB/YUYV/UYVY
  151. <br/>YUV444==>>GRAY
  152. <br/>RAW10==>>RAW16
  153. <br/>RAW12==>RAW16
  154. <br/>RGB==>> BGR/LAB
  155. <br/>BGR==>>NV12/YUV444/RGB
  156. <br/>YUYV/UYVY==>>NV12/NV21
  157. <br/>YUV420_LEGACY==>>NV12
  158. <br/>RGB/YUV420转LAB时,NPU模式仅支持disable和1_1_1
  159. * \warning 请确保输入图像和输出图像尺寸相同;支持4K分辨率。
  160. * \param eVirtualNpuMode: 虚拟NPU模式类别
  161. * \param pSrc: 输入图像指针
  162. * \param pDst: 输出图像指针
  163. */
  164. int AX_NPU_CV_CSC(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode, const AX_NPU_CV_Image* pSrc, AX_NPU_CV_Image* pDst);
  165. /*!
  166. * 函数功能描述:
  167. <br/>实现矩阵乘:C = alphaAB^T,支持选择虚拟 NPU 模式类别
  168. <br/>矩阵 A 和 B 数据类型一致,当输入矩阵 A 数据类型为 int8 时,输出矩阵 C 数据类型为 int16;当输入矩阵 A 数据类型为 float 时,输出矩阵 C 数据类型为 float;
  169. * \warning N 和 K 数值不宜过大,否则硬件不支持;
  170. * \param eVirtualNpuMode: 支持虚拟NPU模式类别:disable 和 111
  171. * \param fAlpha: 矩阵乘的系数
  172. * \param pA: 矩阵 A(MxK),支持 int8, float
  173. * \param pB: 矩阵 B(NxK),支持 int8, float
  174. * \param pC: 矩阵 C(MxN), 矩阵乘的结果,支持 int16,float;需要用户分配内存
  175. */
  176. int AX_NPU_CV_MatMul(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode, const AX_F32 fAlpha, const AX_NPU_CV_Matrix2D* pA, const AX_NPU_CV_Matrix2D* pB, AX_NPU_CV_Matrix2D* pC);
  177. /*!
  178. * 定义 AX_NPU_CV_Laplacian 算子上下文
  179. */
  180. typedef AX_VOID* AX_NPU_CV_LaplacianContext;
  181. typedef struct _AX_NPU_CV_LaplacianParams {
  182. AX_S8 nKernelValue[9];
  183. } AX_NPU_CV_LaplacianParams;
  184. /*!
  185. * 函数功能描述:
  186. * <br/>实现对输入矩阵进行拉普拉斯变换操作。
  187. * <br/>输入矩阵行和列数要求2对齐;最小支持 2x32;最大支持 4K 分辨率。
  188. * \warning 程序退出前,需要调用 AX_NPU_CV_DestroyLaplacianContext 释放算子上下文。
  189. * \param pContext: 算子上下文指针。如果 `*pContext` 为空指针, 算子内部会自动分配内存。
  190. * \param eVirtualNpuMode: 虚拟NPU模式类别
  191. * \param pSrc: 输入矩阵,支持 uint8
  192. * \param pDst: 输出矩阵,支持 uint16/int16;需要用户分配内存
  193. * \param pLaplacianParams: 拉普拉斯变换模版系数;如果系数不需要更新,`pLaplacianParams`可给空指针,算子内部会使用`*Context`中的参数来计算;
  194. */
  195. int AX_NPU_CV_Laplacian(AX_NPU_CV_LaplacianContext* pContext, const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode, const AX_NPU_CV_Matrix2D* pSrc, AX_NPU_CV_Matrix2D* pDst, AX_NPU_CV_LaplacianParams* pLaplacianParams);
  196. /*!
  197. * 函数功能描述:
  198. <br/>销毁 AX_NPU_CV_Laplacian 算子上下文
  199. * \param tContext: AX_NPU_CV_Laplacian 算子上下文
  200. */
  201. void AX_NPU_CV_DestroyLaplacianContext(AX_NPU_CV_LaplacianContext tContext);
  202. /*!
  203. * 函数功能描述:
  204. * <br/>实现对输入矩阵的像素值乘以比例系数。
  205. * <br/>输入矩阵行和列数要求2对齐;最小支持 2x32;最大支持 4K 分辨率。
  206. * \param eVirtualNpuMode: 虚拟NPU模式类别
  207. * \param pSrc: 输入矩阵,支持 uint16/int16;
  208. * \param pDst: 输出矩阵,支持 uint16/int16;需要用户分配内存
  209. * \param fScaleRatio: 比例系数, 支持范围[-8, 8)
  210. */
  211. int AX_NPU_CV_MultRatio(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode, const AX_NPU_CV_Matrix2D* pSrc, AX_NPU_CV_Matrix2D* pDst, AX_F64 fScaleRatio);
  212. /*!
  213. * 函数功能描述:
  214. * <br/>实现两个输入矩阵中对应位置元素相乘
  215. * <br/>输入矩阵行和列数要求2对齐;最小支持 2x32;最大支持 4K 分辨率。
  216. * \warning 由于虚拟NPU模式下,NPU内部计算单元近似取整方式不同,1_1_1模式下为ROUND_TO_EVEN, 1_1_2和disable模式下为四舍五入,故相同输入在不同虚拟NPU模式下结果会略有差异。
  217. * \param eVirtualNpuMode: 虚拟NPU模式类别
  218. * \param pSrc0: 输入矩阵,支持 uint16/int16;
  219. * \param pSrc1: 输入矩阵,支持 uint8,实际含义为u1.7,即1bit整数,7bit小数;
  220. * \param pDst: 输出矩阵,支持 uint16/int16;需要用户分配内存
  221. */
  222. int AX_NPU_CV_HadamardProduct(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode, const AX_NPU_CV_Matrix2D* pSrc0, const AX_NPU_CV_Matrix2D* pSrc1, AX_NPU_CV_Matrix2D* pDst);
  223. /*!
  224. * AX_NPU_CV_Thresh 算子模式
  225. */
  226. typedef enum {
  227. AX_NPU_CV_THRESH_MODE_BINARY = 0, /*!<src <= iLowThresh, dst = iMinValue; src > iLowThresh, dst = iMaxValue*/
  228. AX_NPU_CV_THRESH_MODE_CLIP_MAX = 1, /*!<src <= iLowThresh, dst = src; src > iLowThresh, dst = iMaxValue*/
  229. AX_NPU_CV_THRESH_MODE_CLIP_MIN = 2, /*!<src <= iLowThresh, dst = iMinValue; src > iLowThresh, dst = src*/
  230. AX_NPU_CV_THRESH_MODE_MIN_MID_MAX = 3, /*!<src <= iLowThresh, dst = iMinValue; iLowThresh < src <= iHighThresh, dst = iMidValue; src > iHighThresh, dst = iMaxValue*/
  231. AX_NPU_CV_THRESH_MODE_ORI_MID_MAX = 4, /*!<src <= iLowThresh, dst = src; iLowThresh < src <= iHighThresh, dst = iMidValue; src > iHighThresh, dst = iMaxValue*/
  232. AX_NPU_CV_THRESH_MODE_MIN_MID_ORI = 5, /*!<src <= iLowThresh, dst = iMinValue; iLowThresh < src <= iHighThresh, dst = iMidValue; src > iHighThresh, dst = src*/
  233. AX_NPU_CV_THRESH_MODE_MIN_ORI_MAX = 6, /*!<src <= iLowThresh, dst = iMinValue; iLowThresh < src <= iHighThresh, dst = src; src > iHighThresh, dst = iMaxValue*/
  234. AX_NPU_CV_THRESH_MODE_ORI_MID_ORI = 7, /*!<src <= iLowThresh, dst = src; iLowThresh < src <= iHighThresh, dst = iMidValue; src > iHighThresh, dst = src*/
  235. } AX_NPU_CV_THRESH_MODE_E;
  236. /*!
  237. * AX_NPU_CV_Thresh 算子参数
  238. */
  239. typedef struct _AX_NPU_CV_ThreshParams {
  240. AX_S32 iLowThresh; /*!<低阈值 */
  241. AX_S32 iHighThresh; /*!<高阈值 */
  242. AX_S32 iMinValue; /*!<最小值 */
  243. AX_S32 iMidValue; /*!<中间值 */
  244. AX_S32 iMaxValue; /*!<最大值 */
  245. AX_NPU_CV_THRESH_MODE_E eMode; /*!<阈值化模式 */
  246. } AX_NPU_CV_ThreshParams;
  247. /*!
  248. * 定义 AX_NPU_CV_Thresh 算子上下文
  249. */
  250. typedef AX_VOID* AX_NPU_CV_ThreshContext;
  251. /*!
  252. * 函数功能描述:
  253. * <br/>实现输入矩阵阈值化
  254. * <br/>输入矩阵行和列数要求2对齐;最小支持 2x32;最大支持 4K 分辨率。
  255. * \warning 只有在`BINARY`和`MIN_MID_MAX`模式下,允许输入输出数据类型不一致,其它模式下输入输出数据类型必须一致
  256. * \warning `iLowThresh` 和 `iHighThresh` 不能超出输入数据类型值域范围,且iLowThresh <= iHighThresh
  257. * \warning `iMinValue`、`iMidValue`和`iMaxValue`不能超出输出数据类型值域范围
  258. * \param eVirtualNpuMode: 虚拟NPU模式类别
  259. * \param pSrc: 输入矩阵,支持 uint16/int16/uint8;
  260. * \param pThreshParams: 阈值化算子参数
  261. * \param pDst: 输出矩阵,支持 uint16/int16/uint8;需要用户分配内存
  262. */
  263. int AX_NPU_CV_Thresh(AX_NPU_CV_ThreshContext* pContext, const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode, const AX_NPU_CV_Matrix2D* pSrc, const AX_NPU_CV_ThreshParams* pThreshParams, AX_NPU_CV_Matrix2D* pDst);
  264. /*!
  265. * 函数功能描述:
  266. <br/>销毁 AX_NPU_CV_Thresh 算子上下文
  267. * \param tContext: AX_NPU_CV_Thresh 算子上下文
  268. */
  269. void AX_NPU_CV_DestroyThreshContext(AX_NPU_CV_LaplacianContext tContext);
  270. /*!
  271. * 函数功能描述:
  272. * <br/>实现图像仿射变换
  273. * \param eVirtualNpuMode: 虚拟NPU模式类别, 仅支持disable和1_1_2
  274. * \param pSrc: 输入图像,支持BGR/RGB/RGBA/RGGB-4ch 8bit/16bit, 支持YUV420(NV12/NV21),最大支持 4K 分辨率
  275. * \param pDst: 输出图像,格式和channel需要和输入一致
  276. * \param pMat33: 3x3变换矩阵
  277. * \param interp: 支持BILINEAR、NEAREST两种插值方式
  278. * \param const_val: 越界点设为该值
  279. */
  280. int AX_NPU_CV_Warp(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode, const AX_NPU_CV_Image* pSrc, const AX_NPU_CV_Image* pDst, const float *pMat33, const AX_NPU_CV_Interp interp, const int const_val);
  281. /*
  282. * <br/>实现前景RGBA和背景RGBA/NV12的图像做blending操作。
  283. * <br/>背景图为整图,前景图可以只和背景图部分区域相对应,此时需要指定前景图相对背景图区域的偏移坐标。
  284. * <br/>blending功能完成后将结果输出到目标地址相应区域。
  285. * \warning 背景图做blending区域不能超出图像实际范围。
  286. * \param eVirtualNpuMode: 虚拟NPU模式类别
  287. * \param pBackground: 背景图像指针,支持RGBA/NV12
  288. * \param pForeground: 前景图像指针,支持RGBA
  289. * \param pDst: 输出图像指针,支持RGBA
  290. * \param nOffsetW: 指定背景图blending区域起始位置宽度
  291. * \param nOffsetH: 指定背景图blending区域起始位置高度
  292. */
  293. int AX_NPU_CV_AlphaBlending(
  294. const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  295. AX_NPU_CV_Image* pBackground, const AX_NPU_CV_Image* pForeground,
  296. AX_NPU_CV_Image* pDst, AX_U32 nOffsetW, AX_U32 nOffsetH);
  297. typedef AX_VOID* AX_NPU_CV_L2NormalizeContext;
  298. /*!
  299. * 函数功能描述:
  300. * <br/>实现对输入矩阵进行 L2 normalize 计算
  301. * <br/>输入矩阵行和列数要求2对齐;最小支持 2x32;最大支持 4K 分辨率。
  302. * \param pContext: AX_NPU_CV_L2Normalize 算子上下文
  303. * \param eVirtualNpuMode: 虚拟NPU模式类别, 支持disable和1_1_1
  304. * \param pSrc: 输入矩阵,支持 float;
  305. * \param pDst: 输出矩阵,支持 float;需要用户分配内存
  306. */
  307. int AX_NPU_CV_L2Normalize(AX_NPU_CV_L2NormalizeContext*pContext, const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode, const AX_NPU_CV_Matrix2D* pSrc, AX_NPU_CV_Matrix2D* pDst);
  308. /*!
  309. * 函数功能描述:
  310. * <br/>Destroy L2Normalize算子的上下文
  311. * \param tContext: AX_NPU_CV_L2Normalize 算子上下文
  312. */
  313. void AX_NPU_CV_DestroyL2NormalizeContext(AX_NPU_CV_L2NormalizeContext tContext);
  314. /*!
  315. * <br/>Saxpy:C = alpha*A + B
  316. * <br/>最大支持 2048x4096x1(HWC) 分辨率。
  317. * \param eVirtualNpuMode: 虚拟NPU模式类别,支持disable和1_1_1
  318. * \param fAlpha: 系数 alpha
  319. * \param pA: 输入矩阵 A,支持 float/int8
  320. * \param pB: 输入矩阵 B,支持 float/int8
  321. * \param pC: 输出矩阵 C,支持 float/int8/int16
  322. */
  323. int AX_NPU_CV_Saxpy(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  324. const AX_F32 fAlpha, const AX_NPU_CV_Matrix2D* pA, const AX_NPU_CV_Matrix2D* pB, AX_NPU_CV_Matrix2D* pC);
  325. /*!
  326. * 定义 AX_NPU_CV_Sgemm 算子上下文
  327. */
  328. typedef AX_VOID* AX_NPU_CV_SgemmContext;
  329. /*!
  330. * 函数功能描述:
  331. <br/>销毁 AX_NPU_CV_Sgemm 算子上下文
  332. * \param tContext: AX_NPU_CV_Sgemm 算子上下文
  333. */
  334. void AX_NPU_CV_DestroySgemmContext(AX_NPU_CV_SgemmContext tContext);
  335. /*!
  336. * <br/>Sgemm:D = alpha*op( A )*op( B ) + beta*C,暂时不支持输入 C 矩阵
  337. * <br/>最大支持 2048x2048x1(HWC)分辨率。
  338. * \param pContext: 算子上下文指针。如果 `*pContext` 为空指针, 算子内部会自动分配内存。
  339. * \param eVirtualNpuMode: 虚拟NPU模式类别,仅支持disable和1_1_1
  340. * \param bTransA: 是否对 A 矩阵转置,False:op( A ) = A, True:op( A ) = A^T,
  341. * \param bTransB: 是否对 B 矩阵转置,False:op( B ) = B, True:op( B ) = B^T,
  342. * \param fAlpha: 系数 alpha
  343. * \param pA: 输入矩阵 A,支持 float
  344. * \param pB: 输入矩阵 B,支持 float
  345. * \param fBeta: 系数 beta
  346. * \param pC: 输入矩阵 C,支持 float
  347. * \param pD: 输出矩阵 D,支持 float
  348. */
  349. int AX_NPU_CV_Sgemm(AX_NPU_CV_SgemmContext* pContext,
  350. const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  351. const AX_BOOL bTransA, const AX_BOOL bTransB,
  352. const AX_F32 fAlpha,
  353. const AX_NPU_CV_Matrix2D* pA, const AX_NPU_CV_Matrix2D* pB,
  354. const AX_F32 fBeta, const AX_NPU_CV_Matrix2D* pC,
  355. AX_NPU_CV_Matrix2D* pD);
  356. /*!
  357. * 定义 AX_NPU_CV_MatAdd/AX_NPU_CV_MatSub 算子上下文
  358. */
  359. typedef AX_VOID* AX_NPU_CV_ConvArithContext;
  360. /*!
  361. * 函数功能描述:
  362. <br/>销毁 AX_NPU_CV_MatAdd /AX_NPU_CV_MatSub算子上下文
  363. * \param tContext: AX_NPU_CV_MatAdd 算子上下文
  364. */
  365. AX_VOID AX_NPU_CV_DestroyConvArithContext(AX_NPU_CV_ConvArithContext tContext);
  366. /*!
  367. * <br/>AX_NPU_CV_MatAdd: 实现矩阵 C = A + B
  368. * <br/>最小支持 1x16;最大支持4096x4096x1(HWC)分辨率。
  369. * \param pContext: 算子上下文指针。如果 `*pContext` 为空指针, 算子内部会自动分配内存。
  370. * \param eVirtualNpuMode: 虚拟NPU模式类别
  371. * \param pAdd1: 输入A矩阵,支持uint8
  372. * \param pAdd2: 输入B矩阵,支持uint8
  373. * \param pDst: 输出C矩阵,支持uint8, 结果clip到(0,255)
  374. */
  375. int AX_NPU_CV_MatAdd(AX_NPU_CV_ConvArithContext *pContext,
  376. const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  377. AX_NPU_CV_Matrix2D *pAdd1,
  378. AX_NPU_CV_Matrix2D *pAdd2,
  379. AX_NPU_CV_Matrix2D * pDst);
  380. /*!
  381. * <br/>AX_NPU_CV_MatSub: 实现矩阵 C = A - B
  382. * <br/>最小支持 1x16;最大支持 4096x4096x1(HWC)分辨率。
  383. * \param pContext: 算子上下文指针。如果 `*pContext` 为空指针, 算子内部会自动分配内存。
  384. * \param eVirtualNpuMode: 虚拟NPU模式类别
  385. * \param pAdd1: 输入A矩阵,支持uint8
  386. * \param pAdd2: 输入B矩阵,支持uint8
  387. * \param pDst: 输出C矩阵,支持uint8, 结果clip到(0,255), int8, 结果clip到(-128,127)
  388. */
  389. int AX_NPU_CV_MatSub(AX_NPU_CV_ConvArithContext *pContext,
  390. const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  391. AX_NPU_CV_Matrix2D *pAdd1,
  392. AX_NPU_CV_Matrix2D *pAdd2,
  393. AX_NPU_CV_Matrix2D * pDst);
  394. /*!
  395. * 定义 AX_NPU_CV_MatSubAbs 算子上下文
  396. */
  397. typedef struct _AX_NPU_CV_SubAbsContext{
  398. AX_VOID* ctx1;
  399. AX_VOID* ctx2;
  400. }AX_NPU_CV_SubAbsContext;
  401. /*!
  402. * 函数功能描述:
  403. <br/>销毁 AX_NPU_CV_MatSubAbs 算子上下文
  404. * \param tContext: AX_NPU_CV_MatSubAbs 算子上下文
  405. */
  406. AX_VOID AX_NPU_CV_DestroySubAbsContext(AX_NPU_CV_SubAbsContext tContext);
  407. /*!
  408. * <br/>AX_NPU_CV_MatSubAbs: 实现矩阵 C = |A - B|
  409. * <br/>最小支持 1x16;最大支持 4096x4096 分辨率。
  410. * \param pContext: 算子上下文指针。如果 `*pContext` 为空指针, 算子内部会自动分配内存。
  411. * \param eVirtualNpuMode: 虚拟NPU模式类别
  412. * \param pAdd1: 输入A矩阵,支持uint8
  413. * \param pAdd2: 输入B矩阵,支持uint8
  414. * \param pDst: 输出C矩阵,支持uint8, 结果clip到(0,255)
  415. */
  416. int AX_NPU_CV_MatSubAbs(AX_NPU_CV_SubAbsContext *pContext,
  417. const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  418. AX_NPU_CV_Matrix2D *pAdd1,
  419. AX_NPU_CV_Matrix2D *pAdd2,
  420. AX_NPU_CV_Matrix2D * pDst);
  421. /*!
  422. * <br/>Sigmoid:sigmoid算子, y = 1/(1+exp(-x))
  423. * <br/>最小支持 1x16;最大支持 2048x4096x1(HWC)分辨率。
  424. * \param eVirtualNpuMode: 虚拟NPU模式类别,仅支持disable和1_1_1
  425. * \param pSrc: 输入矩阵 pSrc,支持 float, 范围[-20,20]。
  426. * \param pDst: 输出矩阵 pDst,支持 float
  427. */
  428. int AX_NPU_CV_Sigmoid(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  429. const AX_NPU_CV_Matrix2D* pSrc, AX_NPU_CV_Matrix2D* pDst);
  430. /*!
  431. * <br/>Softmax:按行计算矩阵的Softmax
  432. * <br/>最大支持 1024x2048x1(HWC)分辨率。
  433. * \param eVirtualNpuMode: 虚拟NPU模式类别, 仅支持disable和1_1_1
  434. * \param pSrc: 输入矩阵 pSrc,支持 float
  435. * \param pDst: 输出矩阵 pDst,支持 float
  436. */
  437. int AX_NPU_CV_Softmax(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  438. const AX_NPU_CV_Matrix2D* pSrc, AX_NPU_CV_Matrix2D* pDst);
  439. /*
  440. * 统计方法
  441. */
  442. typedef enum _AX_NPU_CV_StatsMethod {
  443. AX_NPU_CV_SM_SUM = 0, // 统计和
  444. AX_NPU_CV_SM_MAX = 1, // 统计最大值
  445. AX_NPU_CV_SM_ARGMAX = 2, // 统计最大值位置
  446. AX_NPU_CV_SM_MIN = 3, // 统计最小值
  447. AX_NPU_CV_SM_ARGMIN = 4, // 统计最小值位置
  448. } AX_NPU_CV_StatsMethod;
  449. /*!
  450. * <br/>函数功能描述: 按行统计矩阵元素,功能包括:求和(sum),最大值(max),最大值位置(argmax),最小值(min),最小值位置(argmin)
  451. * <br/>数据类型支持(float, int8, uint8, int16, uint16),
  452. * <br/>float数据求max/min/argmax/argmin时,需要保证宽度16对齐
  453. * <br/>统计argmax/argmin时,宽度不超过8192
  454. * <br/>宽度不超过1600000, 宽*高不超过3072*4096
  455. * \param eVirtualNpuMode: 虚拟NPU模式类别, 仅支持disable和1_1_1
  456. * \param eStatsMethod: 按行统计方法
  457. * \param pSrc: 输入矩阵 pSrc
  458. * \param pDst: 输出矩阵 pDst
  459. */
  460. int AX_NPU_CV_Stats(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  461. const AX_NPU_CV_StatsMethod eStatsMethod, const AX_NPU_CV_Matrix2D* pSrc, AX_NPU_CV_Matrix2D* pDst);
  462. /*!
  463. * <br/>函数功能描述: 计算矩阵方差
  464. * <br/>数据类型支持(uint8)
  465. * <br/>最大支持 1024x1024x1(HWC)分辨率。
  466. * \param eVirtualNpuMode: 虚拟NPU模式类别,仅支持disable和1_1_1
  467. * \param pSrc: 输入矩阵 pSrc, 仅支持uint8输入
  468. * \param pDst: 输出矩阵 pDst, 仅支持float输出
  469. */
  470. int AX_NPU_CV_Variance(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  471. const AX_NPU_CV_Matrix2D* pSrc, AX_NPU_CV_Matrix2D* pDst);
  472. /*
  473. * DMA拷贝模式:
  474. * AX_NPU_CV_DMA_MODE_DIRECT_COPY:直接快速拷贝
  475. * AX_NPU_CV_DMA_MODE_INTERVAL_COPY: 间隔拷贝
  476. */
  477. typedef enum _AX_NPU_CV_DMA_MODE{
  478. AX_NPU_CV_DMA_MODE_DIRECT_COPY,
  479. AX_NPU_CV_DMA_MODE_INTERVAL_COPY,
  480. } AX_NPU_CV_DMA_MODE;
  481. /**
  482. * DMA拷贝控制参数
  483. * DIRECT_COPY模式下,box参数有效
  484. * INTERVAL_COPY模式下,u8VerSegRows/u8HorSegSize/u8ElemSize参数有效, 参数有效范围(1,255)
  485. * INTERVAL_COPY模式下,要求原图height和width,分别是u8VerSegRows/u8HorSegSize的整数倍
  486. */
  487. typedef struct _AX_NPU_CV_DMA_CTRL{
  488. AX_NPU_CV_DMA_MODE mode;
  489. union{
  490. AX_NPU_CV_Box box;
  491. struct{
  492. AX_U8 u8VerSegRows;
  493. AX_U8 u8HorSegSize;
  494. AX_U8 u8ElemSize;
  495. };
  496. };
  497. }AX_NPU_CV_DMA_CTRL;
  498. /*!
  499. * <br/>函数功能描述: 提供内存拷贝的方法,支持快速拷贝模式和间隔拷贝模式
  500. * <br/>数据类型支持(GRAY,RGB)
  501. * <br/>最大支持 4096x4096x1(HWC)分辨率,最小2x32
  502. * \param eVirtualNpuMode: 虚拟NPU模式类别
  503. * \param pSrc: 输入图像 pSrc
  504. * \param pDst: 输出图像 pDst
  505. */
  506. int AX_NPU_CV_DMA(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  507. AX_NPU_CV_Image * pSrc, AX_NPU_CV_Image *pDst, AX_NPU_CV_DMA_CTRL *pstCtrl);
  508. /*
  509. * 定义NCC的输出内存信息
  510. */
  511. typedef struct _AX_NPU_CV_NCC_MEM_S{
  512. AX_U64 u64Numerator;//sum(A*B),A和B矩阵的内积
  513. AX_U64 u64QuadSum1;//sum(A*A)
  514. AX_U64 u64QuadSum2;//sum(B*B)
  515. }AX_NPU_CV_NCC_MEM;
  516. /*!
  517. * <br/>函数功能描述:计算两相同分辨率灰度图像的归一化相互关系系数
  518. * <br/>数据类型支持GRAY
  519. * <br/>最大支持 4096x4096x1(HWC)分辨率。
  520. * \param eVirtualNpuMode: 虚拟NPU模式类别,仅支持disable和1_1_1两种模式
  521. * \param pSrc0: 输入灰度图像pSrc0
  522. * \param pSrc1: 输入灰度图像pSrc1
  523. * \param pDst: 输出计算结果 pDst
  524. */
  525. int AX_NPU_CV_NCC(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  526. const AX_NPU_CV_Image* pSrc0, const AX_NPU_CV_Image* pSrc1, AX_NPU_CV_NCC_MEM * pDst);
  527. /*!
  528. * <br/>函数功能描述:转置矩阵
  529. * <br/>数据类型支持uint8,int8,float
  530. * <br/>最大支持 4096x4096x1(HWC)分辨率。
  531. * \param eVirtualNpuMode: 虚拟NPU模式类别, 仅支持disable和1_1_1两种模式
  532. * \param pSrc: 输入矩阵,仅支持uint8,int8,float
  533. * \param pDst: 输出转置矩阵,仅支持uint8,int8,float
  534. */
  535. int AX_NPU_CV_Transpose_V2(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  536. const AX_NPU_CV_Matrix2D* pSrc, AX_NPU_CV_Matrix2D* pDst);
  537. /*!
  538. * <br/>函数功能描述:按列矩阵求和
  539. * <br/>数据类型支持uint8,int8,float
  540. * <br/>最大支持 256x4096x1(HWC)分辨率。
  541. * \param eVirtualNpuMode: 虚拟NPU模式类别, 仅支持disable模式
  542. * \param pSrc: 输入矩阵,仅支持uint8,int8,float
  543. * \param pDst: 输出转置矩阵,仅支持uint16,float
  544. */
  545. int AX_NPU_CV_ReduceSum(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  546. const AX_NPU_CV_Matrix2D* pSrc, AX_NPU_CV_Matrix2D* pDst);
  547. /*!
  548. * <br/>函数功能描述:转置矩阵,(N,H,W)转置为(N,W,H)
  549. * <br/>数据类型支持uint8,int8,float
  550. * <br/>最大支持 4x4096x4096(NHW)分辨率。
  551. * \param eVirtualNpuMode: 虚拟NPU模式类别, 仅支持disable和1_1_2两种模式
  552. * \param pSrc: 输入矩阵,仅支持uint8,int8,float
  553. * \param pDst: 输出转置矩阵,仅支持uint8,int8,float
  554. */
  555. int AX_NPU_CV_Transpose_3Dim(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  556. const AX_NPU_CV_Matrix3D* pSrc, AX_NPU_CV_Matrix3D* pDst);
  557. /*!
  558. * <br/>函数功能描述:计算矩阵abs
  559. * <br/>数据类型支持int8
  560. * <br/>最大支持 2048x2048x1(HWC)分辨率。
  561. * \param eVirtualNpuMode: 虚拟NPU模式类别,仅支持disable和1_1_1两种模式
  562. * \param pSrc: 输入矩阵 pSrc, 仅支持int8
  563. * \param pDst: 输出计算结果 pDst, 仅支持uint8
  564. */
  565. int AX_NPU_CV_ABS(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  566. const AX_NPU_CV_Matrix2D* pSrc, const AX_NPU_CV_Matrix2D* pDst);
  567. typedef AX_VOID* AX_NPU_CV_Dilate_Context;
  568. typedef struct _AX_NPU_CV_DilateParam {
  569. AX_U8 nKernelValue[9];
  570. } AX_NPU_CV_DilateParam;
  571. /*!
  572. * <br/>函数功能描述:对二值图像进行膨胀操作,
  573. * <br/>模板支持3x3kernel, 模板系数只能是0或255。
  574. * <br/>计算方法为,取目标像素周围3x3个点,与kernel按位与运算,再对9个点的结果取位或运算
  575. * <br/>结果如果为0则目标点置为暗点(0),如果为非0,目标点置为亮点(255)
  576. * <br/>数据类型支持二值图像uint8
  577. * <br/>最大支持 4096x4096x1(HWC)分辨率,最小支持2x32。
  578. * \param pContext: 上下文,如果为null,则内部分配空间
  579. * \param eVirtualNpuMode: 虚拟NPU模式类别
  580. * \param pSrc: 输入矩阵 pSrc, 仅支持uint8
  581. * \param pDst: 输出计算结果 pDst, 仅支持uint8
  582. * \param param: 膨胀算子的kernel参数,仅支持3x3 kernel
  583. */
  584. int AX_NPU_CV_Dilate(AX_NPU_CV_Dilate_Context * pContext,
  585. const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  586. const AX_NPU_CV_Matrix2D* pSrc,
  587. AX_NPU_CV_Matrix2D* pDst,
  588. AX_NPU_CV_DilateParam *param);
  589. void AX_NPU_CV_DestroyDilateContext(AX_NPU_CV_Dilate_Context tContext);
  590. typedef struct _AX_NPU_CV_Erode_Context{
  591. AX_VOID* th_ctx;
  592. AX_VOID* lp_ctx;
  593. } AX_NPU_CV_Erode_Context;
  594. typedef AX_NPU_CV_DilateParam AX_NPU_CV_ErodeParam;
  595. /*!
  596. * <br/>函数功能描述:对二值图像进行腐蚀操作
  597. * <br/>模板支持3x3kernel, 模板系数只能是0或255。
  598. * <br/>计算方法为,取目标像素周围3x3个点,与kernel进行位或运算,再对9个点的结果取位与运算
  599. * <br/>结果如果为0则目标点置为暗点(0),如果为非0,目标点置为亮点(255)
  600. * <br/>数据类型支持二值图像uint8
  601. * <br/>最大支持 4096x4096x1(HWC)分辨率,最小支持2x32。
  602. * \param pContext: 上下文,如果为null,则内部分配空间
  603. * \param eVirtualNpuMode: 虚拟NPU模式类别
  604. * \param pSrc: 输入矩阵 pSrc, 仅支持uint8
  605. * \param pDst: 输出计算结果 pDst, 仅支持uint8
  606. * \param param: 腐蚀算子的kernel参数,仅支持3x3 kernel
  607. */
  608. int AX_NPU_CV_Erode(AX_NPU_CV_Erode_Context * pContext,
  609. const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  610. const AX_NPU_CV_Matrix2D* pSrc,
  611. AX_NPU_CV_Matrix2D* pDst,
  612. AX_NPU_CV_ErodeParam *param);
  613. void AX_NPU_CV_DestroyErodeContext(AX_NPU_CV_Erode_Context tContext);
  614. /*!
  615. * <br/>函数功能描述:计算两矩阵相与的结果
  616. * <br/>数据类型支持二值图像uint8
  617. * <br/>最大支持 2048x2048x1(HWC)分辨率。
  618. * \param eVirtualNpuMode: 虚拟NPU模式类别,仅支持disable和1_1_1两种模式
  619. * \param pSrc0: 输入矩阵 pSrc0, 仅支持uint8
  620. * \param pSrc1: 输入矩阵 pSrc1, 仅支持uint8
  621. * \param pDst: 输出计算结果 pDst, 仅支持uint8
  622. */
  623. int AX_NPU_CV_AND(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  624. const AX_NPU_CV_Matrix2D* pSrc0, const AX_NPU_CV_Matrix2D* pSrc1, const AX_NPU_CV_Matrix2D* pDst);
  625. /*!
  626. * <br/>函数功能描述:计算两矩阵相或的结果
  627. * <br/>数据类型支持二值图像uint8
  628. * <br/>最大支持 2048x2048x1(HWC)分辨率。
  629. * \param eVirtualNpuMode: 虚拟NPU模式类别,仅支持disable和1_1_1两种模式
  630. * \param pSrc0: 输入矩阵 pSrc0, 仅支持uint8
  631. * \param pSrc1: 输入矩阵 pSrc1, 仅支持uint8
  632. * \param pDst: 输出计算结果 pDst, 仅支持uint8
  633. */
  634. int AX_NPU_CV_OR(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  635. const AX_NPU_CV_Matrix2D* pSrc0, const AX_NPU_CV_Matrix2D* pSrc1, const AX_NPU_CV_Matrix2D* pDst);
  636. /*!
  637. * <br/>函数功能描述:计算两矩阵相异或的结果
  638. * <br/>数据类型支持二值图像uint8
  639. * <br/>最大支持 2048x2048x1(HWC)分辨率。
  640. * \param eVirtualNpuMode: 虚拟NPU模式类别,仅支持disable和1_1_1两种模式
  641. * \param pSrc0: 输入矩阵 pSrc0, 仅支持uint8
  642. * \param pSrc1: 输入矩阵 pSrc1, 仅支持uint8
  643. * \param pDst: 输出计算结果 pDst, 仅支持uint8
  644. */
  645. int AX_NPU_CV_XOR(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode,
  646. const AX_NPU_CV_Matrix2D* pSrc0, const AX_NPU_CV_Matrix2D* pSrc1, const AX_NPU_CV_Matrix2D* pDst);
  647. /*!
  648. * <br/>函数功能描述:计算矩阵arctan
  649. * <br/>数据类型支持int8,uint8,float
  650. * <br/>最大支持 2048x2048x1(HWC)分辨率。
  651. * \param eVirtualNpuMode: 虚拟NPU模式类别,仅支持disable和1_1_1两种模式
  652. * \param pSrc: 输入矩阵 pSrc, 数据类型int8,uint8,float
  653. * \param pDst: 输出计算结果 pDst,数据类型float
  654. */
  655. int AX_NPU_CV_Arctan(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode, const AX_NPU_CV_Matrix2D* pSrc, AX_NPU_CV_Matrix2D* pDst);
  656. /*!
  657. * <br/>函数功能描述:计算矩阵arctan2
  658. * <br/>数据类型支持int8,uint8,float
  659. * <br/>最大支持 2048x2048x1(HWC)分辨率
  660. * \param eVirtualNpuMode: 虚拟NPU模式类别,仅支持disable和1_1_1两种模式
  661. * \param pSrc1: 输入矩阵 pSrc1, 数据类型int8,uint8,float
  662. * \param pSrc2: 输入矩阵 pSrc2, 数据类型int8,uint8,float
  663. * \param pDst: 输出计算结果 pDst,数据类型float
  664. */
  665. int AX_NPU_CV_Arctan2(const AX_NPU_SDK_EX_MODEL_TYPE_T eVirtualNpuMode, const AX_NPU_CV_Matrix2D* pSrc1, const AX_NPU_CV_Matrix2D* pSrc2, AX_NPU_CV_Matrix2D* pDst);
  666. #ifdef __cplusplus
  667. }
  668. #endif
  669. #endif