我正在努力研究我的车辆牌照检测算法,并需要一些简单的帮助。
基本上我正在尝试执行以下操作,代码是自我解释的,我只是找不到我正在尝试实现的示例。
提前致谢
if (img.GetPixel(bottomRightc.X, y) <= Color.FromArgb(255, 255, 255, 255)
&&
img.GetPixel(bottomRightc.X, y) >= Color.FromArgb(255, 166,166,166))
{
return false;
}
编辑:
感谢大家的回复,我没有在比较中考虑太多,并在创建此线程后看到了它的问题。我认为我会进行亮度比较,因为我的图像已经灰度化并具有高对比度。
答案 0 :(得分:2)
您是否考虑过在另一个色彩空间工作?使用HSV / HSB,您可以简单地执行类似
的操作if (pixelColor.V <= 255 && pixelColor.V >= 166)
{
return false;
}
假设最大值 - 亮度0-255。假设您正在尝试完成亮度比较,这对我来说并不完全清楚。
编辑:
System.Drawing.Color中有一些方法,亮度介于0.0和1.0之间。所以上面会变成这样的东西:
if (pixelColor.GetBrightness() <= 1.0f && pixelColor.GetBrightness() >= 166.0f/255.0f)
答案 1 :(得分:2)
为了进行适当的比较,您需要为每种颜色导出一个值。一个好的候选人是光度很好covered here。 (该主题的wiki article使用稍微不同的系数集进行计算。)
测试光度将允许您比较两种颜色的相对亮度/暗度。这对于您的车牌检测算法非常方便,因为该板是黑白的。
文章计算颜色亮度或亮度的示例:
private static int Brightness(Color c)
{
return (int)Math.Sqrt(
c.R * c.R * .241 +
c.G * c.G * .691 +
c.B * c.B * .068);
}
尝试比较个别的R,G和B值很可能会让你陷入困境。
答案 2 :(得分:1)
没有为System.Drawing.Color
定义比较运算符,因此您必须实现自己的比较方法。我建议使用扩展方法,例如:
static class ColorExtensions
{
public static bool Between(this Color c, Color a, Color b)
{
/* insert comparison logic here */
}
public static bool LessOrEqual(this Color a, Color b)
{
/* insert comparison logic here */
}
public static bool MoreOrEqual(this Color a, Color b)
{
/* insert comparison logic here */
}
}
所以你可以使用
var color = img.GetPixel(bottomRightc.X, y);
if(color.LessOrEqual(Color.FromArgb(255, 255, 255, 255) &&
color.MoreOrEqual(Color.FromArgb(255, 166, 166, 166)))
{
return false;
}
或
if(img.GetPixel(bottomRightc.X, y).Between(
Color.FromArgb(255, 166, 166, 166),
Color.FromArgb(255, 255, 255, 255)))
{
return false;
}
答案 3 :(得分:0)
这是我比较颜色的解决方案:
public int Compare(Color x, Color y)
{
if (x.ToArgb() == y.ToArgb())
return 0;
float hx, hy, sx, sy, bx, by;
// get saturation values
sx = x.GetSaturation();
sy = y.GetSaturation();
// get hue values
hx = x.GetHue();
hy = y.GetHue();
// get brightness values
bx = x.GetBrightness();
by = y.GetBrightness();
// determine order
// 1 : hue
if (hx < hy)
return -1;
else if (hx > hy)
return 1;
else
{
// 2 : saturation
if (sx < sy)
return -1;
else if (sx > sy)
return 1;
else
{
// 3 : brightness
if (bx < by)
return -1;
else if (bx > by)
return 1;
else
return 0;
}
}
}
我想您可以修改以满足您的特定需求!基本上它比较颜色的色调,然后是饱和度,最后是亮度! (我用它来分类颜色。)