霍夫线变换-如何闭合线以形成多边形?

时间:2019-04-26 19:25:49

标签: c++ opencv computer-vision

我目前正在开发纸牌检测程序。我正在使用霍夫线变换来检测卡的位置,因为这似乎是最可靠的方法。因为它较少依赖环境条件(例如,光线和背景)(我认为),而不是寻找轮廓。

我正在使用这张图片进行测试:

转换后,我得到以下结果:

如您所见,线条不会闭合多边形,我无法对卡片的位置做出任何结论。

我已经考虑过使用一些标准(角度等)将属于同一张卡片的线归为一组,但是我想知道是否有更好,更快的方法来查找每张卡片的位置。

我使用了以下代码:

einsum

1 个答案:

答案 0 :(得分:4)

我提出了另一种方法,而不是使用霍夫线变换来检测卡片,而不必闭合线来形成多边形。这是主要思想:

  • 将图像转换为灰度
  • 高斯模糊图像
  • 使用Canny边缘检测来获得卡的位置
  • 查找轮廓
  • 通过获取每个轮廓的面积以确保其与最小阈值面积匹配来过滤轮廓

结果如下:

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