2015-11-28 4 views
1

Привет, я хочу преобразовать из rgb в hsv, и я слежу за алгоритмом easyRGB.com. Но не работает, он показывает больше красного, чем обычно. Я переписываю один и тот же алгоритм несколько раз и пересматриваю, но я не могу найти ошибку. Есть идеи? Существует алгоритм.Преобразование RGB в HSV

public static double[] RGB2HSV(double[] tmp){ 

    double R = tmp[0]/255.0; 
    double G = tmp[1]/255.0; 
    double B = tmp[2]/255.0; 

    double min = Math.min(Math.min(R, G), B); 
    double max = Math.max(Math.max(R, G), B); 
    double delta = max - min; 

    double H = max; 
    double S = max; 
    double V = max; 

    if(delta == 0){ 
     H = 0; 
     S = 0; 
    }else{ 

     S = delta/max; 

     double delR = (((max - R)/6) + (delta/2))/delta; 
     double delG = (((max - G)/6) + (delta/2))/delta; 
     double delB = (((max - B)/6) + (delta/2))/delta; 

     if(R == max){ 
      H = delB - delG; 
     }else if(G == max){ 
      H = (1/3) + delR - delB; 
     }else if(B == max){ 
      H = (2/3) + delG - delR; 
     } 

     if(H < 0) H += 1; 
     if(H > 1) H -= 1; 
    } 

    double[] hsv = new double[3]; 
    hsv[0] = H; 
    hsv[1] = S; 
    hsv[2] = V; 
    return hsv; 
} 

ответ

2

Значения 1/3 и (2/3) являются 0, потому что вы работаете с двумя целыми числами, так что результат является целым числом тоже.

Используйте вместо этого 1.0/3.0 и 2.0/3.0.

+1

Спасибо, правда, глупая ошибка с моей стороны честно. Не могу поверить, что я пытался это исправить и не понимаю. Благодаря! –