FloodFill
对图像进行泛洪填充。
函数接口声明如下:
HmppResult HMPPI_FloodFill_4Con_8u_C1IR(uint8_t *srcDst, int srcDstStep, HmppiSize roiSize, HmppiPoint seed, uint8_t newVal, HmppiConnectedComp *pRegion);
HmppResult HMPPI_FloodFill_8Con_32f_C1IR(float *srcDst, int srcDstStep, HmppiSize roiSize, HmppiPoint seed, float newVal, HmppiConnectedComp *pRegion);
HmppResult HMPPI_FloodFill_8Con_8u_C1IR(uint8_t *srcDst, int srcDstStep, HmppiSize roiSize, HmppiPoint seed, uint8_t newVal, HmppiConnectedComp *pRegion);
参数
参数名 |
描述 |
取值范围 |
输入/输出 |
|---|---|---|---|
srcDst |
指向源和目标缓冲区的指针。 |
非空 |
输入/输出 |
srcDstStep |
源图像和目标图像中连续行的起点之间的距离。 |
非负整数 |
输入 |
roiSize |
源和目标图像感兴趣区域的大小(以像素为单位)。 |
非负整数 |
输入 |
seed |
源图像中泛洪填充的起点。 |
seed.x∈(0, INT_MAX],seed.y∈(0, INT_MAX] |
输入 |
newVal |
用于泛洪填充的新值。 |
输入数据类型的范围 |
输入 |
pRegion |
指向连通分量结构体的指针。 |
非空 |
输出 |
返回值
- 成功:返回HMPP_STS_NO_ERR。
- 失败:返回错误码。
错误码
错误码 |
描述 |
|---|---|
HMPP_STS_NULL_PTR_ERR |
srcDst,pRegion中存在空指针。 |
HMPP_STS_SIZE_ERR |
roiSize的字段为零或负值。 |
HMPP_STS_STEP_ERR |
srcDstStep中存在零或负值。 |
HMPP_STS_ROI_ERR |
roiSize.width * 通道数 * 数据类型所占字节数 > 步长。 |
HMPP_STS_NOT_EVEN_STEP_ERR |
srcDstStep不能被srcDst所属数据类型的字节长度整除的错误条件。 |
示例
#include <stdio.h>
#include "hmppi.h"
#include "hmpp_type.h"
void FloodFillExample()
{
HmppiSize roi = {7, 7};
uint8_t srcDst[50] = { 1, 1, 1, 1, 1, 1, 1,
0, 0, 1, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 1,
0, 0, 0, 0, 1, 1, 1,
0, 0, 1, 0, 0, 1, 1,
0, 0, 0, 0, 1, 0, 1,
1, 1, 1, 1, 1, 1, 1
};
int32_t srcDstStep = 7 * sizeof(uint8_t);
HmppiPoint seed = {3, 3};
uint8_t newVal = 2;
HmppiConnectedComp pRegion;
HmppResult res = HMPPI_FloodFill_4Con_8u_C1IR(srcDst, srcDstStep, roi, seed, newVal, &pRegion);
printf("result: %d\n", (int)res);
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 7; j++) {
printf("%d ", srcDst[i * 7 + j]);
}
printf("\n");
}
}
int main()
{
FloodFillExample();
return 0;
}
运行结果:
result: 0 1 1 1 1 1 1 1 2 2 1 0 0 0 1 2 1 1 1 0 1 1 2 2 2 2 1 1 1 2 2 1 2 2 1 1 2 2 2 2 1 0 1 1 1 1 1 1 1 1