检测扑克牌号码python和opencv

检测扑克牌号码python和opencv,python,opencv,Python,Opencv,我正在尝试创建一个扑克牌号码检测器,可惜没有成功 我创建了一个包含数字图片的文件夹。我用覆盆子皮相机给一张卡片拍照,然后剪下号码。然后我将剪切的数字与文件夹中的数字图片进行比较 不幸的是,整件事并不能可靠地进行。我做错了什么? 还有其他方法吗 守则: def detectCard(self): listindex = 0 cardplace = 1000 similarity = 0 while (listindex <=

我正在尝试创建一个扑克牌号码检测器,可惜没有成功

我创建了一个包含数字图片的文件夹。我用覆盆子皮相机给一张卡片拍照,然后剪下号码。然后我将剪切的数字与文件夹中的数字图片进行比较

不幸的是,整件事并不能可靠地进行。我做错了什么? 还有其他方法吗

守则:

def detectCard(self):
        listindex = 0
        cardplace = 1000
        similarity = 0

        while (listindex <= 8):
            # Load image and template
            image = cv2.imread("/home/pi/Desktop/Pythonprojekte/tmp/pycharm_project_712/Cards/picture.png")
            template = cv2.imread(self.cardlink[listindex])


            # Convert to grayscale for faster detection
            imageGray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
            templateGray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)


            imageGray = cv2.adaptiveThreshold(imageGray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 115, 1)
            templateGray = cv2.adaptiveThreshold(templateGray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 115, 1)


            cv2.imwrite("/home/pi/Desktop/Pythonprojekte/tmp/pycharm_project_712/Cards/imageGray.png", imageGray)
            cv2.imwrite("/home/pi/Desktop/Pythonprojekte/tmp/pycharm_project_712/Cards/templateGray.png", templateGray)

            # Analysis
            result = cv2.matchTemplate(imageGray, templateGray, cv2.TM_CCOEFF_NORMED)
            min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
            print("Value at Index ", listindex,"=",max_val)

            if (max_val > similarity):
                cardplace = listindex
                similarity = max_val
                #print("Similarity =", similarity)

            listindex = listindex + 1

            if (listindex == 9):
                print("The Card is in the Index", cardplace)
                print (similarity)
def检测卡(自身): listindex=0 cardplace=1000 相似性=0 while(列表索引相似性): cardplace=列表索引 相似性=最大值 #打印(“相似性=”,相似性) listindex=listindex+1 如果(listindex==9): 打印(“卡片在索引中”,cardplace) 印刷品(相似性)
当你有旋转、光照变化、比例变化、遮挡等我现在想不到的情况时,模板匹配通常是有问题的。你最好也发布一些示例图片,以了解正在发生的事情和可能出现的错误。。。在大多数情况下,如果您扭曲卡片,使其与模板卡片大小和旋转相匹配,然后剪切数字,这将是一件好事。此外,其他与机器学习相关的技术可能会帮助您完成这项任务。另一种更难的方法是使用。如果我没记错的话,其中一些对旋转和缩放是不变的。@Joe这也是真的,而且OpenCV已经在函数中实现了它。