【问题标题】:Detect object by name of card and crop it using openCV按卡片名称检测对象并使用 openCV 对其进行裁剪
【发布时间】:2021-03-15 13:48:47
【问题描述】:

我有一张带有身份证、银行卡和签名的图片,我想得到id_card.jpgbank_card.jpgsignature.jpg

问题身份证和银行卡长宽一样,不知道怎么检测。但是颜色是不同的,建议可以通过颜色获得,或者最好的方法是获取每张卡片的名称,然后按名称裁剪每张卡片??

我是这个领域的新手,我在紧急项目中工作,如果有人可以帮助我,我会非常感激。

图像看起来像

使用此代码,我只能获得银行卡,不能像我想要的那样工作:(

  # I want here to get name of each object i dont know how after loop and crop
 for i in range(len(contours)):
   area = cv2.contourArea(contours[i])
   if hierarchy[i][3] == -1:
      cv2.drawContours(orig, contours, -1, (0, 255, 0), 3) 

我现在可以画了,我需要裁剪。

那么如何使用 opencv 和深度学习获取每个对象的名称和裁剪,谢谢?

【问题讨论】:

  • 这是深度学习最基本的用例。我很确定可以训练一个准确的分类器来区分信用卡和身份证。您只需要学习使用 Keras 并创建一组手动分类的图像进行训练。
  • @AndriyMakukha 谢谢你的评论,我只是在多个项目中工作,深度学习不是我的专业领域,但如果你能与我分享一些资源或培训课程,我将非常感激谢谢 :)
  • 嗨 AndriyMakukha @AndriyMakukha 我希望你做得很好,前一天我读了很多关于深度学习的书,但我认为构建数据集对我来说要困难得多,因为我不知道所有用户的身份证,我不知道我该如何提取这个对象,否则如果你能帮助我,我将非常感激:) –
  • 我用谷歌搜索了一个视频数据集MIDV-500。我敢肯定还有身份证和银行卡的图像数据集。

标签: python opencv image-processing deep-learning computer-vision


【解决方案1】:

你可以做很多事情, 一个好的方法是在万事达卡或身份证的最上角裁剪标志,并将其保存为模板,而不是每次要检查它是否是万事达卡时,您都会寻找标志和图像之间的良好匹配,如果您找到比这更好的匹配,那就是万事达卡。这是一个使用opencv进行模板匹配的简单代码

image = cv2.imread("scan.jpg")
template  = cv2.imread("masterCardLogo.jpg")
res = cv2.matchTemplate(image,template,cv2.TM_SQDIFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
if(max_val>0.5):
    print("This is a master Card")

正如我之前提到的,还有很多其他方法,如下所示

【讨论】:

  • 感谢您的回答,为什么这个条件 max_val>0.5 尤其是 0.5,我怎样才能获得图像主卡?
  • 我怎样才能得到签名?!
  • 这只是一个尝试值,如果100%匹配则值为1,如果完全没有匹配则值为0。在多次尝试为您的应用程序找到最佳值后,您可能需要稍微调整该值。
  • 再次感谢您,我收到了正确的信息,但我怎么才能收到?!我认为需要 drawContours 吗?!
  • 你可以得到计数器并像这样裁剪它 x,y,w,h = cv2.boundingRect(counter)cropedImage= image[y:y+h, x:x+w]签名,您可以使用模板匹配来检测万事达卡并对ID做同样的想法,第三个将自动成为签名
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 2021-08-29
  • 2013-05-05
相关资源
最近更新 更多