如何检测位图中所有特定颜色(和相似颜色)的像素?

时间:2018-10-20 16:41:05

标签: java android image-processing colors bitmap

我正在处理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)的一部分(我的意思是对人眼而言)

关于我该怎么做的任何想法?

1 个答案:

答案 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
}