如何使用卤化物算子==

时间:2014-12-17 14:25:48

标签: operator-keyword halide

我是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)){
                                          ^

任何人都可以告诉我什么是错的以及如何解决它?

1 个答案:

答案 0 :(得分:3)

您想使用Halide :: select()函数:

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);