如何获得像素的颜色?

时间:2018-01-20 14:43:32

标签: android opencv

我必须使用Android Studio和OpenCV获得图像中最主要(最常见)的颜色,所以我试图迭代图像中的每个像素并获得其颜色。然后我计算每种颜色(红色,绿色,蓝色,黄色,其他)的多少像素在图像中并获得最大颜色(具有最多像素的颜色)并打印其第一个字母(r - 红色,g - 绿色,y - 黄色,b - 蓝色,x - 其他)。

我的代码有效,但它不会产生想要的输出。我是这样做的:

            int color = imageBitmap.getPixel(j, i);

            if(color == Color.RED){
                red++;
            }else if(color == Color.GREEN){
                green++;
            }else if(color == Color.YELLOW){
                yellow++;
            }else if(color == Color.BLUE){
                blue++;
            }else{
                other++;
            }

另外,我试过这个(首先将RGB图像转换为HSV),但它也不会产生所需的输出:

            if(hue > 340 || hue < 20){
                red++;
            }
            else if(hue > 20 && hue < 45){
                orange++;
            }
            else if(hue > 45 && hue < 70){
                yellow++;
            }
            else if(hue > 90 && hue < 140){
                green++;
            }
            else{
                other++;
            }

任何想法如何解决这个问题?

解决方案:我终于做到了,这是我的解决方案(感谢Shiva kumar):

    int red = 0;
    int green = 0;
    int yellow = 0;
    int orange = 0;
    int other = 0;

    Bitmap newBitmap = Bitmap.createScaledBitmap(imageBitmap, 1, 1, true);
    final int color = newBitmap.getPixel(0, 0);
    newBitmap.recycle();

    int redValue = Color.red(color);
    int greenValue = Color.green(color);
    int blueValue = Color.blue(color);

    float[] hsv = new float[3];
    Color.RGBToHSV(redValue, greenValue, blueValue, hsv);

    float hue = hsv[0];
    float saturation = hsv[1];
    float value = hsv[2];

    if(hue > 340 || hue < 20){
        red++;
    }
    else if(hue > 20 && hue < 45){
        orange++;
    }
    else if(hue > 45 && hue < 70){
        yellow++;
    }
    else if(hue > 90 && hue < 140){
        green++;
    }
    else{
        other++;
    }

1 个答案:

答案 0 :(得分:0)

int pixel = bitmap.getPixel(x,y);

int redValue = Color.red(pixel);

int blueValue = Color.blue(pixel);

int greenValue = Color.green(pixel);

使用rgb值尝试获得颜色!!