标记2d数组C ++得到了错误的结果

时间:2016-06-15 03:12:21

标签: c++

我是新手并且使用连接组件标记算法。 我的目的是我需要找出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);

1 个答案:

答案 0 :(得分:0)

if语句中,您需要使用==运算符进行比较。单=是作业。例如:

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

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