从彩色图像中获取点的坐标

时间:2015-07-31 00:31:45

标签: c# winforms visual-studio image-processing

我想从彩色图像中找到黑色点的坐标。如果我在白色背景上放三个点,我的代码会检测到它并在文本框中显示坐标。但是我的代码对以下链接中给出的图像不起作用。我该怎么办?

https://drive.google.com/file/d/0B6ynC-W5aF41cWxtU3BVN3g3U00/view?usp=sharing

我的代码是:

for (int i = 0; i < PatientImage.Image.Height; i++)
 {
    for (int j = 0; j < PatientImage.Image.Width; j++)
      {
          //Get the color at each pixel
          Color now_color = bmp.GetPixel(j, i);

//Compare Pixel's Color ARGB property with the picked color's ARGB Property 
           if (now_color.ToArgb() ==  Color.Black.ToArgb())
            {
                 // MessageBox.Show("Color Found!");
                 // MessageBox.Show("X = " + j + " , " + "Y =" + i);
                    bool flag = false;

                 if (String.IsNullOrEmpty(COPX.Text))
                   {
                      COPX.Text = Convert.ToString(j);
                      COPY.Text = Convert.ToString(i);
                      flag = true;
                    }

            }
      }
 }

1 个答案:

答案 0 :(得分:0)

正如已经提到的,主要的问题是“黑点”和“黑点”。什么都不是黑色的。它们最多只是一种深灰色。

真正的解决方案是不比较颜色的平等,但亮度低于某个阈值

float threshold = 0.15f;
if (bmp.GetPixel(j, i).GetBrightness() < threshold )..

显然你必须使用阈值。

应用一些gamma to the image, best by using a Color Matrix ..

也可能会有所帮助

仔细观察示例图像,我必须假设其他部分也相当暗;要排除它们,您可能还需要添加一个饱和度检查..:

Color now_color = bmp.GetPixel(j, i);
if (now_color.GetBrightness() < threshold1  && now_color.GetSaturation < threshold2)..