检测信用卡大小的卡的算法

时间:2018-03-21 02:47:14

标签: opencv computer-vision

我想在图片中检测出信用卡大小的卡片。该卡可以是任何卡,例如身份证,会员卡。目前,我正在考虑使用Canny Edge,Hough Line和Hough Circle来检测卡片。但是当我想要结合Hough Line和Hough Circle的所有信息来定位卡片时,这个过程将是乏味的。有人建议使用阈值和findContour但卡的颜色可能与背景类似,这使得该方法难以达到预期的效果。是否有任何内核和方法可以帮助我检测卡?

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:2)

我认为,您的问题类似于文档扫描程序。您可以参考this link

  1. 使用Canny边缘检测器查找图像中的边缘(较低和较高的阈值可以设置为0.66 * meanIntensity和1.33 * meanIntensity)并执行形态学关闭操作。

    Edge image after performing close

  2. 使用findContours

  3. 查找图像中的轮廓
  4. 过滤掉不需要的轮廓(我用contourArea来过滤轮廓)

  5. 使用approxPolyDP将轮廓近似为7点或更多点。 (我在这里使用0.005 *周长作为参数)

  6. 如果您想找到准确的边缘,请在点之间插入线条并获得4条最大的线条。找到它们的交点(因为卡片可能包含或不包含弯曲边缘)

  7. 您最终会得到卡片端点,可以进一步用于单应性或确定区域。

    vertices of the card

  8. 修改 编辑答案,包括获取卡顶点的步骤,并更新结果。

答案 1 :(得分:1)

这里有两个子问题 -

  1. 检测图像中的矩形对象。
  2. 矩形对象的实际大小应与信用卡类似。
  3. 对于第一部分,您可以尝试几种方法来提取图像中的矩形区域,看看哪种方法适合您。

    • post显示了许多可以尝试的方法。
    • 根据我的经验,边缘检测在大多数情况下效果最佳。尝试Canny>与Appoximations的轮廓>过滤掉不相关的轮廓>使用一些形状检测,模板匹配或任何其他方法搜索矩形。即使this post也能做类似的事情来实现它的任务。

    到第二点,除非图像中有任何参考(已知)大小的对象,否则无法找出图像中对象的大小。如果从更近的距离拍摄图像,则卡片看起来会更大,如果从远处拍摄,卡片看起来会更小。因此,在捕获时,您将必须执行一些限制,例如您可以要求用户捕获图像以及一些标准标尺。您还可以要求用户在A4纸上捕获图像,并且所有纸张边缘都可见。因为,您知道A4纸的大小,您将能够估计卡的大小。

    除了上述方法之外,如果您有足够的此类图像数据集,您可以使用Haar分类器或基于神经网络/深度学习的方法以更高的准确度执行此操作。