我目前正在开发纸牌检测程序。我正在使用霍夫线变换来检测卡的位置,因为这似乎是最可靠的方法。因为它较少依赖环境条件(例如,光线和背景)(我认为),而不是寻找轮廓。
我正在使用这张图片进行测试:
转换后,我得到以下结果:
如您所见,线条不会闭合多边形,我无法对卡片的位置做出任何结论。
我已经考虑过使用一些标准(角度等)将属于同一张卡片的线归为一组,但是我想知道是否有更好,更快的方法来查找每张卡片的位置。
我使用了以下代码:
einsum
答案 0 :(得分:4)
我提出了另一种方法,而不是使用霍夫线变换来检测卡片,而不必闭合线来形成多边形。这是主要思想:
结果如下:
Canny边缘检测(左)检测到卡(右)
请注意,所有边缘均已检测到,这就是为什么我们必须过滤以去除小颗粒的原因
检测到轮廓
检测到的轮廓:7
我的实现是在Python中进行的,但是您可以使用相同的策略将其转换为C ++
Sub RemoveFilters(Ws As Worksheet)
Dim LO As ListObject
On Error Resume Next
Ws.ShowAllData
For Each LO In Ws.ListObjects
LO.ShowAutoFilter = True
LO.AutoFilter.ShowAllData
Next
Ws.ShowAllData
End Sub