我正在处理Android Studio中的位图图像,并且我想知道如何检测所有红色像素为例,而不是仅检测严格等于Color.RED的像素。我只是举一个红色的例子,但是我想用所有可能的颜色来做。
I tried to do this:
...
int[] pixels = new int[width * height];
myBitmap.getPixels(pixels, 0, width, 0, 0, width, height);
for (int i = 0; i < width * height; i++) {
if (pixels[i] == Color.RED) {
// color detected
}
...
但是这不起作用,因为我的图像不包含(255,0,0)的红色像素,但是包含可能是(251,30,77)或(239,23,42)的像素还有“红色”,等等...
那么我该怎么做呢?我也尝试过类似的东西:
int reference; // color as rgb
if ( (Color.red(pixels[i]) > Color.red(reference) - 20) &&
(Color.red(pixels[i]) < Color.red(reference) + 20 &&
...
{
// pixel detected
}
...
我假设(r +-20,g +-20,b + -20)是(r,g,b)的一部分(我的意思是对人眼而言)
关于我该怎么做的任何想法?
答案 0 :(得分:1)
您可以接受所需颜色一定距离内的所有像素。假设您想要RED,并且所有东西都在RED的10欧氏距离内:
boolean distance(int a, int b) {
return Math.sqrt(Math.pow(Color.red(a) - Color.red(b), 2) + Math.pow(Color.blue(a) - Color.blue(b), 2) + Math.pow(Color.green(a) - Color.green(b), 2));
}
....
int reference = Color.RED;
if (distance(reference, pixels[i]) < 10) {
//pixel accepted
}