Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何找到黑色像素位置_C#_C++_Colors_Coordinates_Pixels - Fatal编程技术网

C# 如何找到黑色像素位置

C# 如何找到黑色像素位置,c#,c++,colors,coordinates,pixels,C#,C++,Colors,Coordinates,Pixels,我在做一个奇怪的项目。我有一个激光切割机,我用它来制作模板(从金属)。我可以使用坐标对机器进行编程,以切割特定图像,但我想知道的是:我如何编写一个程序,以拍摄黑白扫描图像,并给出黑色区域的坐标?我不介意它给出每个像素,即使我只需要外线,我也能做到这一点 我搜索这个问题已经有一段时间了,但是这个问题有太多的单词和大量的结果,比如颜色和像素,以至于我找到了大量与之无关的信息。我想使用C++或C语言,但我可以使用任何语言,包括脚本。< /P> < P>尽管在许多语言中有很多解决方案,我会概述一个简单的

我在做一个奇怪的项目。我有一个激光切割机,我用它来制作模板(从金属)。我可以使用坐标对机器进行编程,以切割特定图像,但我想知道的是:我如何编写一个程序,以拍摄黑白扫描图像,并给出黑色区域的坐标?我不介意它给出每个像素,即使我只需要外线,我也能做到这一点


我搜索这个问题已经有一段时间了,但是这个问题有太多的单词和大量的结果,比如颜色和像素,以至于我找到了大量与之无关的信息。我想使用C++或C语言,但我可以使用任何语言,包括脚本。< /P> < P>尽管在许多语言中有很多解决方案,我会概述一个简单的解决方案,我可能会用我自己。Python有一个很棒的图像库,称为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
image=image.open(“image.png”)
datas=image.getdata()
对于数据中的项目:
如果项目[0]<255且项目[1]<255且项目[2]<255:
//这个像素不是白色的

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

如果我们假设扫描的图像是完全白色和完全黑色,没有中间颜色,那么我们可以将图像作为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
       }
     }
for(int i=0;iC#
中使用:

public List GetBlackDots()
{
彩色像素;
var list=new st();
对于(int y=0;y我不是专家,但也许OpenCV可以用于这个。听起来你需要一些边缘检测算法。看看你可以用块和指针来接近C++的速度。除了你提出的阈值之外,我还建议使用线性插值,因为颜色变化的可能性。作为整数的精确像素非常小。它可能是一个像素分数,而不是一个精确的像素整数。谢谢你的回复,这正是我想要的。所有的回复实际上都是我想要的。一个非常好的开始。谢谢你的回复。我想我也会使用C#回复,但是这个对于其他项目来说,这是一个很好的信息。非常好用并且容易阅读:)我想这是我将使用的方法,主要是为了学习更多的C#。这是一个多么有用的函数。感谢这个伟大的起点。我想这是我们处理像素颜色的唯一方法(例如,检查特定像素是否为黑色)在EMGU C.V。
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;
}