【问题标题】:Algorithm to detect credit card sized card检测信用卡大小卡片的算法
【发布时间】:2018-08-30 00:57:23
【问题描述】:
我想在图像中检测信用卡大小的卡片。该卡可以是任何卡,例如身份证、会员卡。目前,我正在考虑使用 Canny Edge、Hough Line 和 Hough Circle 来检测卡片。但是当我想结合霍夫线和霍夫圆的所有信息来定位卡片时,这个过程会很繁琐。有人建议使用阈值和findContour,但是卡片的颜色可能与背景相似,这使得这种方法难以达到预期的效果。有没有什么内核和方法可以帮我检测卡?
【问题讨论】:
标签:
opencv
computer-vision
【解决方案1】:
我认为,您的问题类似于文档扫描仪。可以参考this link
-
使用 Canny 边缘检测器查找图像中的边缘(下限和上限阈值可设置为 0.66*meanIntensity 和 1.33*meanIntensity)并进行形态学关闭操作。
Edge image after performing close
使用 findContours 查找图像中的轮廓
过滤掉不需要的轮廓(我用contourArea过滤轮廓)
使用 approxPolyDP 将轮廓近似为 7 个或更多点。 (我这里用0.005 *周长作为参数)
如果您想找到准确的边缘,请在点之间拟合线并获得最大的 4 条线。找到它们的交点(因为卡片可能包含也可能不包含弯曲边缘)
-
您最终会得到可进一步用于单应性或确定区域的卡端点。
vertices of the card
编辑
编辑答案以包括获取卡片顶点的步骤并更新结果。
【解决方案2】:
这里有两个子问题——
- 检测图像中的矩形对象。
- 矩形对象的实际大小应与信用卡相似。
对于第一部分,您可以尝试几种方法来提取图像中的矩形区域,看看哪种方法适合您的需要。
- 这个post 展示了许多您可以尝试的方法。
- 根据我的经验,边缘检测在大多数情况下效果最好。尝试 Canny > Contours with Appoximations > 过滤掉不相关的轮廓 > 使用一些形状检测、模板匹配或任何其他方法搜索矩形。甚至this post 也做了类似的事情来完成它的任务。
来到第二点,除非图像中有任何参考(已知)大小的对象,否则您无法找出图像中对象的大小。如果图像是从较近的距离拍摄的,卡片会显得更大,如果从远处拍摄,卡片会显得更小。因此,在捕获时,您必须强制执行一些限制,例如您可以要求用户使用一些标准标尺来捕获图像。您还可以要求用户在 A4 纸上捕获所有纸张边缘可见的图像。由于您知道 A4 纸的尺寸,因此您可以估算卡片的尺寸。
除了上述方法之外,如果您有足够的此类图像数据集,您可以使用 Haar 分类器或基于神经网络/深度学习的方法来做这件事,准确率更高。