【问题标题】:EmguCV Colour RecognitionEmguCV 颜色识别
【发布时间】:2013-06-06 11:05:40
【问题描述】:

我正在尝试编写一个程序来检测魔方的颜色

这就是我到目前为止运行的屏幕截图,我基本上使用了 emguCV 附带的边缘检测示例中的代码,并用它来检测小立方体(但你可以看到一些小立方体不是被检测到,但这不是我想在这里讨论的问题)。

现在在找出小立方体在哪里之后,我想检测它们是哪种颜色,目前我正在使用 HSV 值来决定颜色,如下所示:

if (current_colour.Hue > 120 && current_colour.Hue < 170)
{
     Colours[(int)colornames.W]++;
}
else if (current_colour.Hue > (170))
{
     Colours[(int)colornames.R]++;
}
else if (current_colour.Hue > 5 && current_colour.Hue < 20 )
{
     Colours[(int)colornames.O]++;
}
else if (current_colour.Hue > 47 && current_colour.Hue< 60)
{
     Colours[(int)colornames.G]++;
}
else if (current_colour.Hue > 15 && current_colour.Hue < 30)
{
     Colours[(int)colornames.Y]++;
}
else if (current_colour.Hue > 100 && current_colour.Hue < 110)
{
     Colours[(int)colornames.B]++;
}

我使用 Photoshop 从反复试验中获得的每种颜色的值...我确信一定有更好的方法,因为我得到的结果是混乱的(尤其是白色和红色) 有什么帮助吗?

【问题讨论】:

  • 您好,您是使用正方形内的所有数据来生成平均颜色还是仅使用 GetAverage 将生成 ROI 的平均值的单个像素。要获得更好的结果,请使用饱和度和值。您还可以使用其他图像类型(例如 Bgr)来确认结果,特别是因为在理想世界中白色将是 (255,255,255) 和红色 (0,0,255)。我还可以说你在做什么看起来真的很有趣,很好的工作。希望我能帮忙
  • 嘿,克里斯,我使用的是单个像素,但现在我正在考虑取正方形内多个(大约 9 或 10)像素的平均值(通过编写我自己的函数)是 GetAverareage将为我执行此操作的函数(我用谷歌搜索但一无所获)。
  • 嗨,是的,它所做的就是获取 ROI,将每个像素相加并除以像素数,因此编写自己的函数同样简单。我希望单个像素会产生您的主要错误,因为如果由于图像编码和压缩,黑色会影响颜色,因为它靠近边缘,更不用说噪音了。我建议采取广场中心并从那里开始工作。干杯
  • 谢谢,我编写了自己的函数来平均 10 个不同样本点的值,这确实有很大帮助,现在我要做的就是修复正方形识别(边缘跟踪)

标签: c# emgucv


【解决方案1】:

如果你的图片和你的例子一样简单,你可以在图片上做一个直方图。直方图中的峰值将对应于您使用的颜色。

因此,您必须制作一个或三个直方图,取彼此相距足够远的最高 10 个(或其他)bin 值,然后您就有了颜色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-13
    • 2011-12-18
    • 2011-02-20
    • 2021-04-28
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多