在2D数组C 上的标签得出了错误的结果

Labelling on an 2d array C++ got the wrong result

本文关键字:错误 结果 标签 数组 2D      更新时间:2023-10-16

我是新手,并使用连接的组件标记算法。我的目的是我需要找出3个光点,然后计算每个块的中心点的坐标(类型的图像处理)。但是,在我运行for循环之后,我获得了三个街区的所有中心点的相同坐标,并且不知道出了什么问题。有人可以帮我吗?非常感谢!

这是我的代码

for (size_t i = 0; i < 128; i++)
        {
            for (size_t j = 0; j < 128; j++)
            {
                if (pInt[i * 128 + j] <= 18000) label[i][j] = 0;
                if (pInt[i * 128 + j] > 18000)
                {
                    if (label[i-1][j-1] != 0)
                    {
                        label[i][j] = label[i-1][j-1];
                    }
                    if (label[i-1][j] != 0)
                    {
                        label[i][j] = label[i-1][j];
                    }
                    if (label[i-1][j+1] != 0)
                    {
                        label[i][j] = label[i-1][j+1];
                    }
                    if (label[i][j-1] != 0)
                    {
                        label[i][j] = label[i][j-1];
                    }
                    if ((label[i - 1][j - 1] = 0) && (label[i - 1][j] = 0) && (label[i - 1][j + 1] = 0) && (label[i][j - 1] = 0))
                    {
                        l = l + 1;
                        label[i][j] = l;
                    }
                }
                if (label[i][j] = 1)
                {
                    count1++;
                    sumx1 = sumx1 + i;
                    sumy1 = sumy1 + j;
                }
                if (label[i][j] = 2)
                {
                    count2++;
                    sumx2 = sumx2 + i;
                    sumy2 = sumy2 + j;
                }
                if (label[i][j] = 3)
                {
                    count3++;
                    sumx3 = sumx3 + i;
                    sumy3 = sumy3 + j;
                }
            }
        }
        float y1 = (float)sumx1 / count1;
        float z1 = (float)sumy1 / count1;
        float y2 = (float)sumx2 / count2;
        float z2 = (float)sumy2 / count2;
        float ya = (float)sumx3 / count3;
        float za = (float)sumy3 / count3;
        printf("three points:n1(%f, %f)n2(%f, %f)na(%f, %f)n", z1 - 64, 64 - y1, z2 - 64, 64 - y2, za - 64, 64 - ya);

在您的if语句中,您需要使用==操作员进行比较。单个=是分配。例如:

if (label[i][j] == 1)

有6个地方我看到您需要进行此更改。