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