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

ResizeLinear

此类函数用于调整图像大小,属于图像几何变换的一类功能。

在调用ResizeLinear函数之前需要先调用Init函数进行初始化,然后调用ResizeLinear主功能函数,最后调用Release函数释放相关空间。对于Resize类函数,主要有以下三种处理方式调整图像大小:

  • Init之后,调整整个图像的大小,最后Release。
  • Init之后,对每一个图像块调整大小,最后Release。
  • 对每个图像块进行Init,之后通过Resize主函数调整大小,最后Release。

目前仅支持双线性插值算法进行图像大小调整。

函数接口声明如下:

  • 初始化函数:

    HmppResult HMPPI_ResizeLinearInit_8u(HmppiSize srcSize, HmppiSize dstSize, HmppiResizePolicy_32f** policy);

  • 主函数:

    HmppResult HMPPI_ResizeLinear_8u_C3R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiPoint dstOffset, HmppiSize dstSize, HmppiBorderType border, const uint8_t *borderValue, const HmppResizePolicy_32f *policy);

    HmppResult HMPPI_ResizeLinear_8u_C4R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiPoint dstOffset, HmppiSize dstSize, HmppiBorderType border, const uint8_t *borderValue, const HmppResizePolicy_32f *policy);

  • 释放函数:

    HmppResult HMPPI_ResizeLinearRelease_8u(HmppResizePolicy_32f *policy);

参数

参数名

描述

取值范围

输入/输出

src

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

非空

输入

srcStep

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

非负整数

输入

srcSize

源图像块的大小。

正整数

输入

dst

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

非空

输入/输出

dstStep

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

非负整数

输入

dstOffset

目标图像块的偏移值。

非负整数

输入

dstSize

目标图像块的大小。

正整数

输入

border

边界取值算法。

目前支持如下算法:

HMPPI_BORDER_REPL

HMPPI_BORDER_IN_MEM

HMPPI_BORDER_REPL | HMPPI_BORDER_IN_MEM_BOTTOM

HMPPI_BORDER_REPL | HMPPI_BORDER_IN_MEM_TOP

HMPPI_BORDER_REPL | HMPPI_BORDER_IN_MEM_LEFT

HMPPI_BORDER_REPL | HMPPI_BORDER_IN_MEM_RIGHT

HMPPI_BORDER_REPL | HMPPI_BORDER_IN_MEM_RIGHT | HMPPI_BORDER_IN_MEM_BOTTOM

HMPPI_BORDER_REPL | HMPPI_BORDER_IN_MEM_RIGHT | HMPPI_BORDER_IN_MEM_TOP

HMPPI_BORDER_REPL | HMPPI_BORDER_IN_MEM_LEFT | HMPPI_BORDER_IN_MEM_BOTTOM

HMPPI_BORDER_REPL | HMPPI_BORDER_IN_MEM_LEFT | HMPPI_BORDER_IN_MEM_TOP

HMPPI_BORDER_REPL | HMPPI_BORDER_IN_MEM_RIGHT | HMPPI_BORDER_IN_MEM_BOTTOM | HMPPI_BORDER_IN_MEM_LEFT

HMPPI_BORDER_REPL | HMPPI_BORDER_IN_MEM_RIGHT | HMPPI_BORDER_IN_MEM_TOP | HMPPI_BORDER_IN_MEM_BOTTOM

HMPPI_BORDER_REPL | HMPPI_BORDER_IN_MEM_LEFT | HMPPI_BORDER_IN_MEM_BOTTOM | HMPPI_BORDER_IN_MEM_TOP

HMPPI_BORDER_REPL | HMPPI_BORDER_IN_MEM_LEFT | HMPPI_BORDER_IN_MEM_TOP | HMPPI_BORDER_IN_MEM_RIGHT

ER_REPL | HMPPI_BORDER_IN_MEM

输入

borderValue

边界值。

border为HMPPI_BORDER_CONST时边界值

输入

policy

特殊结构体的指针。

非空

输入/输出

返回值

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

错误码

错误码

描述

HMPP_STS_NO_OPERATION

告警,不进行操作。srcSize和dstSize中width、height存在零。

HMPP_STS_NULL_PTR_ERR

传入的任意一个指针存在空指针。

HMPP_STS_MALLOC_FAILED

Policy初始化时内存申请失败。

HMPP_STS_SIZE_ERR

srcSize和dstSize中width、height存在负值。

或srcSize小于2x2。

HMPP_STS_BORDER_ERR

边界算法类型不支持。

HMPP_STS_OUT_OF_RANGE_ERR

目标图像块偏移值比Init函数输入的目标图像块的width/height大。

HMPP_STS_SIZE_WRN

目标图像块width/height比Init函数输入的目标图像块的width/height大。

示例

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include "hmppi.h"
#include "hmpps.h"

int main ()
{
    HmppiResizePolicy_32f *policy = NULL;
    HmppiSize srcSize = {2, 2};
    HmppiSize dstSize = {4, 4};
    int32_t numChannels = 3;
    HmppiBorderType borderType = HMPPI_BORDER_REPL;
    const uint8_t borderValue = 0;
    HmppResult result = 0;
    HmppiPoint dstOffset = {0, 0};

    uint8_t src[12] = {0, 255, 3, 6, 255, 0,
                       2, 1,   3, 4, 134, 23};
    int32_t dstLen = dstSize.width * dstSize.height * numChannels;
    uint8_t *dst = HMPPS_Malloc_8u(dstLen);

    result = HMPPI_ResizeLinearInit_8u(srcSize, dstSize, &policy);
    printf("result = %d\n", result);
    int32_t srcStep = srcSize.width * numChannels * sizeof(uint8_t);
    int32_t dstStep = dstSize.width * numChannels * sizeof(uint8_t);
    result = HMPPI_ResizeLinear_8u_C3R(src, srcStep, dst, dstStep, dstOffset, dstSize, borderType, &borderValue, policy);
    printf("result = %d\n", result);

    HMPPI_ResizeLinearRelease_8u(policy);
    printf("free policy end\n");
    for (int32_t i = 0; i < dstLen; i++) {
        printf("%d ", dst[i]);
    }
    printf("\n");
    HMPPS_Free(dst);
}

运行结果:

result = 0
result = 0
free policy end
0 255 3 2 255 2 5 255 1 6 255 0 1 192 3 2 200 4 4 216 5 6 225 6 2 65 3 2 89 7 4 139 14 5 164 17 2 1 3 3 34 8 4 101 18 4 134 23