1
我是新手,並且使用連接組件標記算法。 我的目的是,我需要找出3塊光點,然後計算每個塊的中心點的座標(圖像處理類型)。 但是在我運行for循環之後,我得到了三個塊的所有中心點的相同座標,並且不知道出了什麼問題。 有人可以幫我! 非常感謝!在二維數組上標註C++得到了錯誤的結果
這是我的代碼
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);
非常感謝。 這很有趣,它仍然可以工作:P 我剛剛編輯,它似乎更好。此外,我從其他地方讀取,並通過if ... else取代所有if,這似乎是一個正確的決定;) – Aki