OpenCV无法正确检测到红色

时间:2017-05-14 14:49:18

标签: java eclipse opencv colors

最近,我正在尝试使用java OpenCV来检测魔方的颜色。我的魔方有六种颜色,包括白色,黄色,橙色,红色,蓝色和绿色。我使用的色彩空间是HSV色彩空间。根据Wiki,每种颜色都有其独特的色调值范围,因此理论上我只能使用Hue来确定我检测到的颜色(除了颜色白色我使用饱和度)。但是,此方法适用于除红色以外的所有颜色。我用于红色的Hue值范围是(179> = hue> = 160 || 6.5> = hue> = 0),但是我得到的实际值可以在几乎任何颜色之间。红色可以被检测为除白色之外的所有其他颜色。可能是什么原因? OpenCV中有可能存在错误吗?下面是我用来从图像中读取颜色的代码。谢谢你的任何建议。

Imgproc.cvtColor(oriImage, hsvImg, Imgproc.COLOR_RGB2HSV);
Imgproc.medianBlur(hsvImg, hsvImg, 5);
double[] color = new double[3];
double[] data = new double[3];
int sqr = (size*2+1)*(size*2+1);

//up left corner sampling
for(int i = centerX-size ; i<=centerX+size ; i++)
    for(int j = centerY-size ; j<=centerY+size ; j++)
    {
        data = hsvImg.get(j, i);
        color[0] += data[0]; color[1] += data[1]; color[2] += data[2];
    }
color[0] /= sqr; //Hue
color[1] /= sqr; //Saturation
color[2] /= sqr; //Value

if(color[1] <= 65)//if saturation is smaller than 65
    return standardWhite;
else if(color[0]>=18.49 && color[0]<= 35.49)
    return standardYellow;
else if((color[0]>=160 && color[0]<= 179)||(color[0]>=0 && color[0]<=6.49))
    return standardRed;
else if(color[0]>=6.5 && color[0]<= 17)
    return standardOrange;
else if(color[0]>=35.5 && color[0]<= 92)
    return standardGreen;
else if(color[0]>=100 && color[0]<= 158)
    return standardBlue;
else//color detection failed
    return standardGray;

an example

0 个答案:

没有答案