【发布时间】:2017-05-29 12:12:21
【问题描述】:
我试图找出黑桃、梅花、菱形和哈特之间的区别。卡片上的数字无关紧要,重要的是花色。
我已经尝试通过仅查看红色或黑色来进行颜色检测,但这仍然让我得到每种颜色的两个结果。我如何确保我可以单独检测每个符号?
例如:我有一张红色公鹿、红色菱形、黑色铁锹和黑色梅花的图片。我想用不同的颜色绘制每个符号的轮廓。
我正在使用我的网络摄像头作为相机。
【问题讨论】:
我试图找出黑桃、梅花、菱形和哈特之间的区别。卡片上的数字无关紧要,重要的是花色。
我已经尝试通过仅查看红色或黑色来进行颜色检测,但这仍然让我得到每种颜色的两个结果。我如何确保我可以单独检测每个符号?
例如:我有一张红色公鹿、红色菱形、黑色铁锹和黑色梅花的图片。我想用不同的颜色绘制每个符号的轮廓。
我正在使用我的网络摄像头作为相机。
【问题讨论】:
如果你的牌的花色总是相同的(只有一种牌),你可以只存储黑桃、梅花、菱形和哈特的图像,然后检查给定图像与你的参考的互相关并选择最高值(请参阅this question)。如果您有一个相当大的样本集,其中包含不同种类的卡片,它们的花色表示之间存在细微差异,您几乎可以按照this tutorial 对您的训练集进行四向分类,并使用支持向量机、聚类或其他方法,在 open-cv 中可用。
希望这会有所帮助,一切顺利
【讨论】:
我没有看到任何代码,所以无法真正调整你所拥有的,但更一般地说,你应该能够训练它,除了符号而不是颜色:
这是一个用于制作特定卡片的示例代码。您可以将它们训练为特定于卡片,从而通过特定卡片捕获所有符号,或者备份它并更一般地训练符号(心形/菱形)。您还应该在 opencv 上查看template matching。
在 github 上有一些指南和code already completed。
【讨论】:
由于卡片符号在固定位置,您可以尝试如下(例如在OpenCV 3.2Python):
image = image[h1:h2,w1:w2] thresh = mask = cv2.inRange(image,(0,0,0),(100,100,100)) _, contours, hierarchy = cv2.findContours()
area = cv2.contourArea(contour)
您必须在其中建立每个符号的面积阈值,以便第 4 步进行比较。以上所有cv2函数仅供参考。
希望对您有所帮助。
【讨论】:
除非你有严重的透视变形(无论如何它可能会起作用),template matching 非常有效。您可以分别在红色和黑色通道中运行它(显然不要寻找红色黑桃等)。
看看例如(不是我的)
http://www.pyimagesearch.com/2015/01/26/multi-scale-template-matching-using-python-opencv
关于扑克牌,另见https://github.com/arnabdotorg/Playing-Card-Recognition
【讨论】: