我必须使用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++;
}
答案 0 :(得分:0)
int pixel = bitmap.getPixel(x,y);
int redValue = Color.red(pixel);
int blueValue = Color.blue(pixel);
int greenValue = Color.green(pixel);
使用rgb值尝试获得颜色!!