2016-06-15 37 views
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); 

回答

0

在您需要使用==運算符來比較你的if語句。單一=是分配。例如:

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

有6個地方我看到需要進行此更改的位置。

+0

非常感謝。 這很有趣,它仍然可以工作:P 我剛剛編輯,它似乎更好。此外,我從其他地方讀取,並通過if ... else取代所有if,這似乎是一個正確的決定;) – Aki