使用OpenCV计算骰子上的点数

时间:2013-08-13 14:27:50

标签: python opencv

我正在做一个骰子价值识别爱好项目,我想在Raspberry Pi上运行。现在,我只是在学习OpenCV,因为这对我来说似乎是最困难的事情。我已经走到这一步,我已经扩张,侵蚀和精巧过滤掉了骰子。这给了我一个等高线的层次结构。图像显示父轮廓的边界矩形:

enter image description here

我的问题是:我将如何计算点数?为面值做一些模板匹配是否更好,或者我应该在数学上测试一个点是否在边界框内的有效位置?

3 个答案:

答案 0 :(得分:2)

可能有多种方法可以做到:

  1. 使用孔填充,然后使用形态学运算符过滤圆圈。
  2. 更简单的方法是使用白色像素密度(白色像素的百分比)。五点会有更高的白像素密度。
  3. 使用图像矩(表示图像形状和结构的数学属性)来训练不同类型骰子面的神经网络。
  4. 参考: 形态学 http://blogs.mathworks.com/pick/2008/05/23/detecting-circles-in-an-image/

答案 1 :(得分:1)

正如Sivam Kalra Said所说,有许多有效的方法。

我会选择模板匹配,因为它应该是健壮的并且相对容易实现。

  • 使用canny图像中的绿色区域,将每个找到的模具面从原始灰度图像复制到较小的搜索图像中。搜索图像应略大于模具面,并且大于6个图案图像。
  • 可选择规范化搜索图像
  • 对6种可能的骰子模式中的每一种使用cvMatchTemplate(我推荐使用CV_TM_SQDIFF_NORMED算法,但测试效果最好)
  • 在6场比赛中的每场比赛的结果图像中查找并存储全局最小值
  • 以0°~90°的步长旋转搜索图像,并为每一步重复模板匹配

在所有步骤中具有最低最小值的骰子模式是正确的。

答案 2 :(得分:0)

轮廓hierechy可能是一个很好且非常简单的选择,但你需要一个垂直视觉。

所以你可以用轮廓来做,但是用som阈值拟合圆圈

(抱歉我的英语)