【发布时间】: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 个不同样本点的值,这确实有很大帮助,现在我要做的就是修复正方形识别(边缘跟踪)