中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

Mirror

此类函数实现了对图像的几何变换,可以将图像绕指定的轴进行镜像翻转。其中,翻转轴的角度由枚举参数flip决定。

函数的接口声明如下:

  • 非原地操作:

    HmppResult HMPPI_Mirror_8u_C1R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_8u_C3R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_8u_C4R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_8u_AC4R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_16u_C1R(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_16u_C3R(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_16u_C4R(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_16u_AC4R(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_16s_C1R(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_16s_C3R(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_16s_C4R(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_16s_AC4R(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_32s_C1R(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_32s_C3R(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_32s_C4R(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_32s_AC4R(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_32f_C1R(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_32f_C3R(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_32f_C4R(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_32f_AC4R(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize, HmppiAxis flip);

  • 原地操作:

    HmppResult HMPPI_Mirror_8u_C1IR(uint8_t* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_8u_C3IR(uint8_t* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_8u_C4IR(uint8_t* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_8u_AC4IR(uint8_t* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_16u_C1IR(uint16_t* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_16u_C3IR(uint16_t* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_16u_C4IR(uint16_t* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_16u_AC4IR(uint16_t* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_16s_C1IR(int16_t* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_16s_C3IR(int16_t* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_16s_C4IR(int16_t* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_16s_AC4IR(int16_t* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_32s_C1IR(int32_t* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_32s_C3IR(int32_t* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_32s_C4IR(int32_t* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_32s_AC4IR(int32_t* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_32f_C1IR(float* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_32f_C3IR(float* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_32f_C4IR(float* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

    HmppResult HMPPI_Mirror_32f_AC4IR(float* srcDst, int32_t srcDstStep, HmppiSize roiSize, HmppiAxis flip);

参数

参数名

描述

取值范围

输入/输出

src

指向源图像的指针。该数组存储源平面图像的颜色数据。

非空

输入

srcStep

源图像中连续行的起点之间的距离(以字节为单位)。

非负整数

输入

dst

指向目的图像感兴趣区域的指针。该数组存储目标平面图像的颜色数据。

非空

输出

dstStep

目标图像中连续行的起点之间的距离(以字节为单位)。

非负整数

输入

srcDst

指向源和目标缓冲区的指针。

非空

输入、输出

srcDstStep

源图像和目标图像中连续行的起点之间的距离(以字节为单位)。

非负整数

输入

flip

指定镜像图像翻转的轴。

HMPP_AXS_HORIZONTAL(水平轴翻转)

HMPP_AXS_VERTICAL(垂直轴翻转)

HMPP_AXS_BOTH(水平+垂直轴翻转)

HMPP_AXS_45(45°轴翻转,仅适用非原地操作C1R类型)

HMPP_AXS_135(135°轴翻转,仅适用非原地操作C1R类型)

输入

roiSize

源和目标图像感兴趣区域的大小(以像素为单位)。

非负整数

输入

返回值

  • 成功:返回HMPP_STS_NO_ERR
  • 失败:返回错误码。

错误码

错误码

描述

HMPP_STS_NULL_PTR_ERR

src或者dst中存在空指针。

HMPP_STS_SIZE_ERR

roiSize的字段为零或负值。

HMPP_STS_STEP_ERR

srcStep或者dstStep中存在零或负值。

HMPP_STS_ROI_ERR

roiSize.width * 通道数 * 数据类型所占字节数 > 步长。

HMPP_STS_NOT_EVEN_STEP_ERR

srcStep或dstStep不能被src或dst所属数据类型的字节长度整除的错误。

HMPP_STS_MIRROR_FLIP_ERR

flip为非法值。

HMPP_STS_NO_ERR

返回值正确,任何其他值表示错误或警告。

示例

#define SRC_BUFFER_SIZE_T 36
#define DST_BUFFER_SIZE_T 36

void PrintResult(HmppResult result, uint8_t *dst, int32_t dstStep)
{
    printf("result = %d \ndst = ", result);
    if (result != HMPP_STS_NO_ERR) {
        printf("result error: %d\n", result);
    }
    int32_t dstWidth = dstStep / sizeof(uint8_t);
    for (int32_t i = 0; i < DST_BUFFER_SIZE_T; i++) {
        if( i % dstWidth == 0 ){
            printf("\n");
        }
        printf("%3d ",dst[i]);
    }
    printf("\n\n");
}

void TestExample()
{
    HmppiSize roi = { 4, 4 };
    uint8_t data[SRC_BUFFER_SIZE_T] = {
        53, 111, 2, 61, 6, 12,
        77, 184, 5, 99, 3,  4,
        41, 233, 1, 27, 5,  6,
        62, 157, 6, 80, 7,  8
    };

    const uint8_t *src = data;
    int32_t srcStep = 6 * sizeof(uint8_t);
    uint8_t dst[DST_BUFFER_SIZE_T] = { 0 };
    int32_t dstStep = 8 * sizeof(uint8_t);
    HmppResult result1 = HMPPI_Mirror_8u_C1R(src, srcStep, dst, dstStep, roi, HMPP_AXS_45);
    PrintResult(result1, dst, dstStep);

    int32_t srcDstStep = 6 * sizeof(uint8_t);
    HmppResult result2 = HMPPI_Mirror_8u_C1IR(data, srcDstStep, roi, HMPP_AXS_BOTH);
    PrintResult(result2, data, dstStep);
}

int main(void)
{
    TestExample();
    return 0;
}

运行结果:

result = 0 
dst = 
 53  77  41  62   0   0   0   0 
111 184 233 157   0   0   0   0 
  2   5   1   6   0   0   0   0 
 61  99  27  80   0   0   0   0 
  0   0   0   0 

result = 0 
dst = 
 80   6 157  62   6  12 
 27   1 233  41   3   4 
 99   5 184  77   5   6 
 61   2 111  53   7   8 
  0   0   0   0   0   0 
  0   0   0   0   0   0