2014-12-17 2 views
0

Я новичок в Halide, и я пытаюсь преобразовать изображение RGB в формат HSV. Алгоритм нижеКак использовать галоидный оператор ==

*RGB->HSV 
max=max(R,G,B): 
min=min(R,G,B) 
V=max(R,G,B) 
S=(max-min)/max: 
ifR = max,H =(G-B)/(max-min)* 60 
ifG = max,H = 120+(B-R)/(max-min)* 60 
ifB = max,H = 240 +(R-G)/(max-min)* 60 
ifH < 0,H = H+ 360* 

так я пишу такой код:

Halide::Expr H,S,V,maxValue,minValue; 
Halide::Expr R = input(x,y,0); 
Halide::Expr G = input(x,y,1); 
Halide::Expr B = input(x,y,2); 

maxValue=Halide::max(R,G); 
maxValue=Halide::max(maxValue,B); 
minValue=Halide::min(R,G); 
minValue=Halide::min(minValue,B); 

V=maxValue; 
S=(maxValue-minValue)/maxValue; 

if(Halide::operator==(maxValue,R)){ 
    H=(G-B)/(maxValue-minValue)*60; 
}else if(Halide::operator==(maxValue,G)){ 
    H=120+(B-R)/(maxValue-minValue)*60; 
}else if(Halide::operator==(maxValue,B)){ 
H=240+(R-G)/(maxValue-minValue)*60; 
} 

Когда я пытаюсь скомпилировать код, он сообщит об ошибке, как это:

error: could not convert 釮alide::operator==(Halide::Expr, Halide::Expr)(Halide::Expr((*(const Halide::Expr*)(& G))))?from 釮alide::Expr?to 鈈ool? 
    }else if(Halide::operator==(maxValue,G)){ 
             ^
Может

никому скажите мне, что случилось, и как его решить?

ответ

3

Вы хотите использовать галогенид :: выбрать функцию (!):

H = Halide::select(maxValue == R, (G-B)/(maxValue-minValue)*60, 
        maxValue == G, 120+(B-R)/(maxValue-minValue)*60, 
        maxValue == B, 240+(R-G)/(maxValue-minValue)*60, 
        /* else */  someOtherValue); 
+0

Спасибо большое Это работает! – Yipwingtim

 Смежные вопросы

  • Нет связанных вопросов^_^