2014-10-06 120 views
1

功能參數:輸入圖像,第一顏色,第二顏色比較像素以RGB顏色

我拍攝圖像,在看它的高度和寬度,然後迭代通過找到的像素。如果像素顏色最接近第一種顏色(color1),則將該像素顏色更改爲color1,如果像素顏色最接近color2,則將其更改爲color2。試圖比較兩種參數顏色時,我認爲問題出在代碼abs(color2-color1)/2上。

void Preprocessor(BMP pix, RGB color1, RGB color2) { 
    int height = pix.GetHeight(); 
    int width = pix.GetWidth(); 

    for (int i = 0; i < height; i++) { 
     for (int j = 0; j < width; j++) { 
      if (pix[i][j]->red + pix[i][j]->green + pix[i][j]->blue > 
       abs(color2 - color1)/2) { // pixel color closest to color1 

       pix[i][j] = color1; 
       pix[i][j] = color1; 
       pix[i][j] = color1; 
      } else { // pixel color closest to color2 
       pix[i][j] = color2; 
       pix[i][j] = color2; 
       pix[i][j] = color2; 
      } 
     } 
    } 
} 
+1

到comapre實驗是有'運營商的實現 - (RGB,RGB)'和'operator /(RGB,int)'? – 2014-10-06 17:42:50

+1

陳述'pix [i] [j] = color1'和'pix [i] [j] = color2'只需要執行一次,但這大多是無害的。 – 2014-10-06 17:44:28

+0

我不認爲你可以用abs()的方式減去顏色。您還將顏色與顏色的差異進行比較。我建議看看這個答案:http://stackoverflow.com/a/9018153/1928529隨着比較描述那裏你可以得到距離pix [i] [j] <-> color1 en pix [i] [j] <-> color2 ,然後檢查哪一種顏色最接近像素。 – dennisschagt 2014-10-06 17:48:40

回答

1

選擇正確的度量

哪種顏色更接近這一的的問題是不平凡的問題。可以有幾種方法來解決這個問題。您可能想要大致具有相同的亮度,或者色調或振動,或者其他方面。

所以你選擇了abs(color2 - color1)/2,這沒有任何直觀的價值。你可以考慮解釋你對這種確切方法的推理。

我建議你從亮度開始()。可以說,你想估計一個Taxicab度量標準中不同顏色的顏色距離。然後選擇較小的一個。

// Taxicab metric (Manhattan) 
double distance(RGB c1, RGB c2) { 
    return 
      abs(c1->red - c2->red) 
     + abs(c1->green - c2->green) 
     + abs(c1->bule - c2->blue); 
} 

void Preprocessor(BMP pix, RGB color1, RGB color2) { 
    int height = pix.GetHeight(); 
    int width = pix.GetWidth(); 

    for (int i = 0; i < height; i++) { 
    for (int j = 0; j < width; j++) { 
     double d1 = distance(color1, pix[i][j]); 
     double d2 = distance(color2, pix[i][j]); 

     if (d1 < d2) { // pixel color closest to color1 
      pix[i][j] = color1; 
     } else { // pixel color closest to color2 
      pix[i][j] = color2; 
     } 
    } 
    } 
} 

考慮

您可能希望還與其他指標(歐式),並與其他配色方案,更加適合以這種方式HSV, HSL