2016-04-17 53 views
0

我的導師寫道:「寫一個量化圖像爲q灰度陰影的函數,例如,如果q = 8,則將0-31之間的每個像素替換爲0,32-63,32,...,和224到224-255。「這是我的代碼到目前爲止。量化圖像

void quantize (int image[][MAXHEIGHT], int width, int height, int q) 
{ 
    const int temp = 256/q; 

    int startPixel, endPixel; 
    int indicator = temp; // where the pixels are divided, 0-31, 32-63, etc if q = 8 

    while (indicator <= 256) 
    { 
     startPixel = indicator - temp; 
     endPixel = indicator - 1; 
     cout << "start value is " << startPixel << " and end value is " << endPixel << endl; 

     for (int row = 0; row < height; row++) 
     { 
      for (int col = 0; col < width; col++) 
      { 
       if ((image[col][row] > startPixel) && (image[col][row] <= endPixel)); 
       { 
        image[col][row] = startPixel; 
       } 
      } 
     } 

     indicator += temp; 
    } 
} 

當我嘗試量化圖像時,它會變成完全白色或完全黑色。我想我正在循環這個功能錯誤,但不知道如何解決它。

+0

你爲什麼不做'image [col] [row] = floor((double)image [col] [row]/temp)* temp',並且只使用嵌套循環? – Carafini

回答

2

錯誤出現在函數的標題中。您正在傳送圖像的副本,因此您的副本在功能內部被修改,但不會超出功能。而且,代碼可以簡化很多。我給你我的方法:

void quantize (int **image, int width, int height, int q) 
{ 
    const int r = 256/q; // Ensure your image is on [0 255] range 
    for (int row = 0; row < height; row++) 
     for (int col = 0; col < width; col++) 
     image[col][row] = (int) (image[col][row]/r); 
} 
+0

這不是功能只是使0-31之間的所有像素0,然後在32-63,1之間的像素,但? –

+0

對不起,我讀到你想要量化8個等級的圖像強度,範圍從[0,7],這是這個函數的功能。正如Adriano Carafini在評論中所說的,要達到你想要的東西,你應該乘以「r」 – Javier