检测图像中的黑色像素

时间:2013-07-24 05:36:15

标签: android

如何从canvas.drawcircle

绘制的圆圈中检测黑色像素
canvas.drawCircle((float)(myMidPoint.x - myEyesDistance/2.0), myMidPoint.y, (float)30.0, myPaint);

int x1=(int) (myMidPoint.x) /2;

int y1=(int)(myMidPoint.y)/2;
// int x2=(int) (myMidPoint.x + myEyesDistance/2.0);
// int y2=(int) myMidPoint.y;
int pixelColor = myBitmap.getPixel(x1,y1);
if(pixelColor == Color.BLACK) {
    //The pixel is black
    System.out.println("pixel black");
} else {
    //The pixel was white
    System.out.println("pixel white");
}

我问过this question before

1 个答案:

答案 0 :(得分:0)

Color.BLACK是argb十六进制值0xff000000的整数表示。所以你的陈述是检查圆圈中的中心点是否与Color.BLACK完全相同的透明度,红色值,蓝色值和绿色值。

一些选择:

您可以尝试使用

比较rgb值
if(Color.rgb(Color.red(Color.BLACK), Color.green(Color.BLACK), Color.blue(Color.BLACK) == Color.rgb(Color.red(pixelColor), Color.green(pixelColor), Color.blue(pixelColor))

或者,您可以扫描整个圆圈以获得黑色(0x000000)像素。

或者您可以使用色差算法,您可以根据需要测试不同的公差。这可以帮助您How to compare two colors for similarity/difference

以下内容尚未经过测试,但会让您了解您可以采取的方向:

//mid points x1 and y1
int x1=(int) (myMidPoint.x) /2;
int y1=(int)(myMidPoint.y)/2;
int radius = 30;
int topPoint = y1 - radius;
int leftPoint = x1 - radius;
int rightPoint = x1 + radius;
int bottomPoint = y1 + radius;
int scanWidth = 0;
for(int i = topPoint; i < bottomPoint; i++) 
{

    if(i <= y1)
    {
        scanWidth++;
    }
    else {
        scanWidth--;
    }
    for(int j = x1 - scanWidth; j < x1 + scanWidth; j++)
    {
        int pixelColor = myBitmap.getPixel(j,i);
        if(Color.rgb(Color.red(Color.BLACK), Color.green(Color.BLACK), Color.blue(Color.BLACK) == Color.rgb(Color.red(pixelColor), Color.green(pixelColor), Color.blue(pixelColor))
        {
            System.out.println("pixel black");
        }
    } 
}