检测图像中黑色像素

问题描述:

我如何从canvas.drawcircle ..

how i can detect black pixel from a circle drawn by 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");
}

我也问过眼前的问题,但没有更新。谁能帮我来说这是非常紧迫的。希望你们能帮助我。 Plzz看到link

Col​​or.BLACK是重新ARGB十六进制值0xff000000的presentation整数。所以,你的说法是检查在圆圈的中心点是完全一样的透明度,红色值,蓝色值和绿色值Color.BLACK。

Color.BLACK is the integer representation of argb Hex value 0xff000000. So your statement is checking whether a center point in the circle is exactly the same transparency, red value, blue value and green value as Color.BLACK.

有几个选项:

您可以尝试使用只是比较RGB值

You can try comparing just the rgb value by using

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处)像素的整个圆。

Alternatively you could scan the entire circle for a black (0x000000) pixel.

另外,您可以使用色差算法,并可以为你所需要的测试不同的公差。这可能会帮助您如何比较两种颜色的。

Alternatively you could use a Color difference algorithm and you can test different tolerances for what you need. This may help you How to compare two colors.

以下尚未经过测试,但会给你一个想法,哪个方向的,你也可以考虑:

The following hasn't been tested, but will give you an idea of which direction you could take also:

//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");
        }
    } 
}