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

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