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

SwapChannels

此类函数实现将源图像指定区域的通道数据按照一定的顺序复制到目标图像的指定区域中。

函数接口声明如下:

HmppResult HMPPI_SwapChannels_8u_C3R(const uint8_t *src, int32_t src_step, uint8_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[3]);

HmppResult HMPPI_SwapChannels_16u_C3R(const uint16_t *src, int32_t src_step, uint16_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[3]);

HmppResult HMPPI_SwapChannels_16s_C3R(const int16_t *src, int32_t src_step, int16_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[3]);

HmppResult HMPPI_SwapChannels_32s_C3R(const int32_t *src, int32_t src_step, int32_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[3]);

HmppResult HMPPI_SwapChannels_32f_C3R(const float *src, int32_t src_step, float *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[3]);

HmppResult HMPPI_SwapChannels_8u_AC4R(const uint8_t *src, int32_t src_step, uint8_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[3]);

HmppResult HMPPI_SwapChannels_16u_AC4R(const uint16_t *src, int32_t src_step, uint16_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[3]);

HmppResult HMPPI_SwapChannels_16s_AC4R(const int16_t *src, int32_t src_step, int16_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[3]);

HmppResult HMPPI_SwapChannels_32s_AC4R(const int32_t *src, int32_t src_step, int32_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[3]);

HmppResult HMPPI_SwapChannels_32f_AC4R(const float *src, int32_t src_step, float *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[3]);

HmppResult HMPPI_SwapChannels_8u_C4R(const uint8_t *src, int32_t src_step, uint8_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[4]);

HmppResult HMPPI_SwapChannels_16u_C4R(const uint16_t *src, int32_t src_step, uint16_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[4]);

HmppResult HMPPI_SwapChannels_16s_C4R(const int16_t *src, int32_t src_step, int16_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[4]);

HmppResult HMPPI_SwapChannels_32s_C4R(const int32_t *src, int32_t src_step, int32_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[4]);

HmppResult HMPPI_SwapChannels_32f_C4R(const float *src, int32_t src_step, float *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[4]);

HmppResult HMPPI_SwapChannels_8u_C3IR(uint8_t *srcdst, int32_t srcdst_step, HmppiSize roi_size, const int32_t dst_order[3]);

HmppResult HMPPI_SwapChannels_8u_C4IR(uint8_t *srcdst, int32_t srcdst_step, HmppiSize roi_size, const int32_t dst_order[4]);

HmppResult HMPPI_SwapChannels_8u_C3C4R(const uint8_t *src, int32_t src_step, uint8_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[4], uint8_t val);

HmppResult HMPPI_SwapChannels_16u_C3C4R(const uint16_t *src, int32_t src_step, uint16_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[4], uint16_t val);

HmppResult HMPPI_SwapChannels_16s_C3C4R(const int16_t *src, int32_t src_step, int16_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[4], int16_t val);

HmppResult HMPPI_SwapChannels_32s_C3C4R(const int32_t *src, int32_t src_step, int32_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[4], int32_t val);

HmppResult HMPPI_SwapChannels_32f_C3C4R(const float *src, int32_t src_step, float *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[4], float val);

HmppResult HMPPI_SwapChannels_8u_C4C3R(const uint8_t *src, int32_t src_step, uint8_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[3]);

HmppResult HMPPI_SwapChannels_16u_C4C3R(const uint16_t *src, int32_t src_step, uint16_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[3]);

HmppResult HMPPI_SwapChannels_16s_C4C3R(const int16_t *src, int32_t src_step, int16_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[3]);

HmppResult HMPPI_SwapChannels_32s_C4C3R(const int32_t *src, int32_t src_step, int32_t *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[3]);

HmppResult HMPPI_SwapChannels_32f_C4C3R(const float *src, int32_t src_step, float *dst, int32_t dst_step, HmppiSize roi_size, const int32_t dst_order[3]);

参数

参数名

描述

取值范围

输入/输出

src

指向源图像感兴趣区域的指针。

非空

输入

srcStep

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

非负整数

输入

dst

指向目标图像感兴趣区域的指针。

非空

输入、输出

dstStep

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

非负整数

输入

srcDst

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

非空

输入、输出

srcDstStep

源图像和目标图像中连续行的起点之间的距离。

非负整数

输入

roiSize

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

非负整数

输入

dstOrder

目标映像中通道的顺序。

0、1、2的随机组合或 0、1、2、3的随机组合

输入

val

常量值。

任意常量值

输入

返回值

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

错误码

错误码

描述

HMPP_STS_NULL_PTR_ERR

src,dst中存在空指针或dstorder值为空。

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_NO_ERR

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

示例

#define SRC_BUFFER_SIZE_T 36
#define DST_BUFFER_SIZE_T 40

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 = { 2, 4 };
    const uint8_t src[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
    };

    int32_t srcStep = 6 * sizeof(uint8_t);
    uint8_t dst[DST_BUFFER_SIZE_T] = { 0 };
    int32_t dstStep = 8 * sizeof(uint8_t);
    const int32_t dst_order[3] = {2, 0, 1};

    HmppResult result = HMPPI_SwapChannels_8u_C3R(src, srcStep, dst, dstStep, roi, dst_order);
    PrintResult(result, dst, dstStep);
}

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

运行结果:

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