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

LabelMarkers

给图像的每个连通分量用数字标签标记。

函数接口声明如下:

  • 原地操作

    HmppResult HMPPI_LabelMarkers_8u_C1IR(uint8_t* pMarker, int markerStep, HmppiSize roiSize, int minLabel, int maxLabel, HmppiNorm norm, int* pNumber);

    HmppResult HMPPI_LabelMarkers_16u_C1IR(uint16_t* pMarker, int markerStep, HmppiSize roiSize, int minLabel, int maxLabel, HmppiNorm norm, int* pNumber);

  • 非原地操作

    HmppResult HMPPI_LabelMarkers_16u8u_C1R(uint16_t* pSrc, int srcMarkerStep, uint8_t* pMarker, int dstMarkerStep, HmppiSize roiSize, int minLabel, int maxLabel, HmppiNorm norm, int* pNumber);

参数名

描述

取值范围

输入/输出

pMarker

指向源图像和目标图像感兴趣区域的指针(原地操作)。

非空

输入,输出

markerStep

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

非负整数

输入

roiSize

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

roiSize.width∈(0, INT_MAX],roiSize.height∈(0, INT_MAX]

输入

minLabel

最小标签值。

minLabel∈[1, 255], minLabel <= maxLabel

输入

maxLabel

最大标签值。

maxLabel∈[1, 255], minLabel <= maxLabel

输入

pSrcMarker

指向源图像感兴趣区域的指针(非原地操作)。

非空

输入

pMarker

指向目标图像感兴趣区域的指针(非原地操作)。

非空

输出

srcMarkerStep

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

非负整数

输入

dstMarkerStep

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

非负整数

输入

norm

标志使用4连接还是8连接方式计算连通分量。

HMPP_NORML1, HMPP_NORMINF, 其中L1代表4连接,INF代表8连接

输入

pNumber

指向连通分量数量的指针。

非空

输出

返回值

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

错误码

错误码

描述

HMPP_STS_NULL_PTR_ERR

pMarker,pSrcMarker中存在空指针。

HMPP_STS_STEP_ERR

markerStep小于或等于0。

HMPP_STS_BAD_ARG_ERR

minLabel, maxLabel不在[1, 255]范围内或minLabel > maxLabel。

HMPP_STS_SIZE_ERR

roiSize.width或roiSize.height小于或等于0。

HMPP_STS_MALLOC_FAILED

使用的辅助缓冲区分配失败。

示例

#include <stdio.h>
#include "hmppi.h"
#include "hmpp_type.h"
void LabelMarkersExample()
{
    HmppiSize roi = {7, 6};
    uint8_t srcDst[50] = { 0, 0, 0, 0, 1, 1, 0,
                        0, 1, 1, 0, 1, 1, 0,
                        0, 1, 1, 0, 1, 1, 0,
                        0, 0, 0, 0, 1, 1, 0,
                        0, 0, 1, 0, 0, 0, 0,
                        0, 0, 0, 0, 0, 0, 1,
                      };
    int32_t srcDstStep = 7 * sizeof(uint8_t);
    HmppiPoint seed = {3, 3};
    uint8_t minLabel = 1;
    uint8_t maxLabel = 8;
    HmppiNorm norm = HMPP_NORML1;
    int number;
    HmppResult res = HMPPI_LabelMarkers_8u_C1IR(srcDst, srcDstStep, roi, minLabel, maxLabel,norm, &number);
    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()
{
    LabelMarkersExample();
    return 0;
}

运行结果:

result: 0
0 0 0 0 1 1 0 
0 2 2 0 1 1 0 
0 2 2 0 1 1 0 
0 0 0 0 1 1 0 
0 0 3 0 0 0 0 
0 0 0 0 0 0 4 
0 0 0 0 0 0 0