如何查找Black Pixel位置

时间:2012-08-01 01:11:06

标签: c# c++ colors coordinates pixels

我正在做一个奇怪的项目。我可以使用激光切割机来制作模板(金属)。我可以使用坐标对机器进行编程以剪切某个图像,但我想知道的是:我怎么能编写一个程序来拍摄黑白扫描图像,并给我黑色的坐标领域?我不介意它是否给出每个像素,即使我只需要外线,我可以做那个部分。

我已经搜索了一段时间了,但是这个问题有很多单词,有很多结果,比如颜色和像素,我发现很多信息都不相关。我想使用C ++或C#,但我可以使用任何语言,包括脚本。

3 个答案:

答案 0 :(得分:4)

我在C#中使用了GetPixel

public List<String> GetBlackDots()
{
    Color pixelColor;
    var list = new st<String>();
    for (int y = 0; y < bitmapImage.Height; y++)
    {
        for (int x = 0; x < bitmapImage.Width; x++)
        {
            pixelColor = bitmapImage.GetPixel(x, y);
            if (pixelColor.R == 0 && pixelColor.G == 0 && pixelColor.B == 0)
                list.Add(String.Format("x:{0} y:{1}", x, y));
        }
    }
    return list;
}

答案 1 :(得分:3)

如果我们假设扫描的图像是完全白色并且完全是黑色而没有中间颜色,那么我们可以将图像作为rgb值的数组,并简单地扫描0值。如果值为0,它必须是黑色的吗?但是,图像可能不会是完全黑色的,所以你需要一些摆动空间。

你所做的事情会是这样的:

    for(int i = 0; i < img.width; i++){
       for(int j = 0; j < img.height; j++){
          // 20 is an arbitrary value and subject to your opinion and need.
          if(img[i][j].color <= 20)
             //store i and j, those are your pixel location
       }
     }

现在,如果您使用C#,可以轻松导入大多数图像格式,将em粘贴在一个数组中,并获得结果。但是如果你想要更快的结果,你最好使用C ++。

此快捷方式完全依赖于非常极端的图像值。如果你的图像的大部分区域真的是灰色的,那么这种方法的准确性是非常糟糕的。

答案 2 :(得分:2)

虽然许多语言都有很多解决方案,但我会概述一个我可能会自己使用的简单解决方案。有一个名为PIL(Python成像库 - http://www.pythonware.com/products/pil/)的Python成像大型库,它可以非常轻松地完成您的需求。

以下是可能有助于您入门的示例。

image = Image.open("image.png")
datas = image.getdata()

for item in datas:
    if item[0] < 255 and item[1] < 255 and item[2] < 255 :
        // THIS PIXEL IS NOT WHITE

当然,这将计算任何不完全白色的像素,您可能需要添加一些填充,因此不完全白色的像素也会被拾取为白色。您还必须跟踪当前正在查看的像素。