使用opencv python检测卡符号

时间:2017-05-29 12:12:22

标签: python opencv

我试图探测锹,棍棒,钻石和哈特之间的区别。卡上的号码无关紧要,只是诉讼很重要。

我只是通过查看红色或黑色来尝试颜色检测,但这仍然让我每种颜色都有两个结果。我怎么能确保我可以单独检测每个符号?

例如:我有一张红色的哈特,一个红色的钻石,一个黑色的铁锹和一个黑色的俱乐部。我想用不同的颜色绘制每个符号的轮廓。

我使用网络摄像头作为相机。

4 个答案:

答案 0 :(得分:0)

如果您的卡片的套装总是相同(只有一种卡片),您可以存储铁锹,俱乐部,钻石和哈特的图像,然后检查给定图像与参考文献的互相关性并选择最高值(见this question)。如果你有一套相当大的不同类型的卡片样本,这些卡片在套装表示之间略有不同,你几乎可以按照this tutorial几乎完全按照你的训练集进行四向分类并使用svm,集群或其他方法,可在open-cv。

中找到

希望这会有所帮助,并且一切顺利

答案 1 :(得分:0)

我没有看到任何代码,所以不能真正调整你所拥有的,但更一般地说你应该能够训练它只是相同的除了符号而不是颜色:

以下是执行特定卡片的示例代码。您可以将它们训练为特定于卡片,从而通过特定卡片捕获所有符号,或者将其备份,更一般地训练符号(心脏/钻石)。您还应该在opencv上查看template matching

github上有几个指南和code already completed

Here is a tutorial worth reading

答案 2 :(得分:0)

由于卡片符号位于固定位置,您可以尝试下方(例如OpenCV 3.2 Python):

  1. 裁剪左上角的符号image = image[h1:h2,w1:w2]
  2. 将符号颜色阈值设为黑色,其余为白色,thresh = mask = cv2.inRange(image,(0,0,0),(100,100,100))
  3. 执行查找轮廓检测_, contours, hierarchy = cv2.findContours()
  4. 获取轮廓的面积大小。 area = cv2.contourArea(contour)
  5. 比较该区域以确定它所属的4个符号中的哪一个。
  6. 您必须在步骤4中构建每个符号的区域阈值以进行比较。上面的所有cv2函数仅供参考。

    希望得到这个帮助。

答案 3 :(得分:0)

除非你有严重的视角扭曲(无论如何它都可能有效),template matching非常有效。您可以分别在红色和黑色通道中运行它(显然不要寻找红色黑桃等)。

看看例如(不是我的)

http://www.pyimagesearch.com/2015/01/26/multi-scale-template-matching-using-python-opencv

对于扑克牌,另请参阅https://github.com/arnabdotorg/Playing-Card-Recognition