CopyConstBorder
在两个图像之间复制像素值,并添加固定值边界框像素。
函数接口声明如下:
HmppResult HMPPI_CopyConstBorder_32f_C1R(const float *src, int32_t srcStep, HmppiSize srcRoiSize, float *dst, int32_t dstStep, HmppiSize dstRoiSize, int32_t topBorderHeight, int32_t leftBorderWidth, float value);
HmppResult HMPPI_CopyConstBorder_8u_C1R(const uint8_t *src, int32_t srcStep, HmppiSize srcRoiSize, uint8_t *dst, int32_t dstStep, HmppiSize dstRoiSize, int32_t topBorderHeight, int32_t leftBorderWidth, uint8_t value);
参数
参数名 |
描述 |
取值范围 |
输入/输出 |
|---|---|---|---|
src |
指向源图像感兴趣区域的指针。 |
非空 |
输入 |
srcStep |
源图像中连续行的起点之间的距离(以字节为单位)。 |
非负整数 |
输入 |
dst |
指向目的图像感兴趣区域的指针。 |
非空 |
输出 |
dstStep |
目标图像中连续行的起点之间的距离(以字节为单位)。 |
非负整数 |
输入 |
srcDst |
指向源和目标图像感兴趣区域的指针(用于原地操作)。 |
非空 |
输入/输出 |
srcDstStep |
原地操作的源图像和目标图像中连续行的起点之间的距离(以字节为单位)。 |
非负整数 |
输入 |
srcRoiSize |
源感兴趣区域的大小(以像素为单位)。 |
srcRoiSize.width∈(0, INT_MAX],srcRoiSize.height∈(0, INT_MAX] |
输入 |
dstRoiSize |
目标感兴趣区域的大小(以像素为单位)。 |
dstRoiSize.width∈(0, INT_MAX],dstRoiSize.height∈(0, INT_MAX] |
输入/输出 |
topBorderHeight |
顶部边框的高度(以像素为单位)。 |
非负整数 |
输入 |
leftBorderWidth |
左边框的宽度(以像素为单位)。 |
非负整数 |
输入 |
value |
边界框像素的值。 |
输入数据类型的范围 |
输入 |
返回值
- 成功:返回HMPP_STS_NO_ERR。
- 失败:返回错误码。
错误码
错误码 |
描述 |
|---|---|
HMPP_STS_NULL_PTR_ERR |
src、dst任一入参中存在空指针。 |
HMPP_STS_SIZE_ERR |
srcRoiSize或dstRoiSize为零或负值。 |
HMPP_STS_STEP_ERR |
srcStep、dstStep中存在零或负值。 |
HMPP_STS_NOT_EVEN_STEP_ERR |
srcStep、dstStep不能被src、dst所属数据类型的字节长度整除的错误条件。 |
HMPP_STS_ROI_ERR |
srcRoiSize.width > 步长或dstRoiSize.width > 步长。 |
示例
#include <stdio.h>
#include "hmppi.h"
#include "hmpp_type.h"
#define SRC_BUFFER_SIZE_T 12
#define DST_BUFFER_SIZE_T 132
int CopyConstBorderExample()
{
HmppiSize roiSrc = {3,4};
uint8_t src[SRC_BUFFER_SIZE_T] = { 1, 2, 3,
2, 3, 4,
3, 4, 5,
4, 5, 6 };
uint8_t dst[DST_BUFFER_SIZE_T] = {0};
int32_t srcStep = 3 * sizeof(uint8_t);
int32_t dstStep = 11 * sizeof(uint8_t);
HmppiSize roiDst = {11,12};
int32_t topBorderHeight = 4;
int32_t leftBorderWidth = 4;
uint8_t value = 255;
HmppResult result = HMPPI_CopyConstBorder_8u_C1R(src, srcStep, roiSrc, dst, dstStep, roiDst, topBorderHeight, leftBorderWidth, value);
printf("result = %d \ndst = \n", 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 < 12; i++){
for (int32_t j = 0; j < 11; j++){
printf("%3d ",dst[i*11+j]);
}
printf("\n");
}
return 0;
}
int main() {
CopyConstBorderExample();
return 0;
}
运行结果:
result = 0 dst = 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 3 255 255 255 255 255 255 255 255 2 3 4 255 255 255 255 255 255 255 255 3 4 5 255 255 255 255 255 255 255 255 4 5 6 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255