Python OpenCV典当棋子未检测到?

Python OpenCV典当棋子未检测到?,python,python-3.x,opencv,object-detection,chess,Python,Python 3.x,Opencv,Object Detection,Chess,我很难发现当押的白色棋子。这有点奇怪,因为它能检测到每一秒的白色棋子。如果我玩未被发现的棋子,它就会被发现 这就是为什么我在Stackoverflow询问的原因,因为我找不到任何帮助或无法向自己解释 一般信息: 我在Lichess玩所有的默认设置和风格。我的白色爪子图片是一个透明的白色png文件(50px 50px)。 阈值为0.6,因为我得到了最好的结果。如果我减少数量,它会检测到更少的白色棋子,如果我增加数量,它会检测到黑色棋子 # Standard settings img_rgb = c

我很难发现当押的白色棋子。这有点奇怪,因为它能检测到每一秒的白色棋子。如果我玩未被发现的棋子,它就会被发现

这就是为什么我在Stackoverflow询问的原因,因为我找不到任何帮助或无法向自己解释

一般信息: 我在Lichess玩所有的默认设置和风格。我的白色爪子图片是一个透明的白色png文件(50px 50px)。 阈值为0.6,因为我得到了最好的结果。如果我减少数量,它会检测到更少的白色棋子,如果我增加数量,它会检测到黑色棋子

# Standard settings
img_rgb = cv2.cvtColor(original_img,cv2.COLOR_BGR2RGB)
img_gray = cv2.cvtColor(img_rgb,cv2.COLOR_BGR2GRAY)

# White Pawn Template
pawn_white_template = cv2.imread("chess_pieces_template/pawn_white.png",0)

w_pawn_white, h_pawn_white = pawn_white_template.shape[::-1]

res_pawn_white = cv2.matchTemplate(img_gray,pawn_white_template,cv2.TM_CCOEFF_NORMED)

threshhold = 0.6
loc = np.where(res_pawn_white >= threshhold)

for pt in zip(*loc[::-1]):
    cv2.rectangle(img_rgb,pt,(pt[0]+w_pawn_white, pt[1]+h_pawn_white),(0,255,255),1)

cv2.imshow('detected',img_rgb)

我希望你们能帮助我。如果你想要更多的信息,请问我

致意


Tobias

我已经下载了你的照片,并对其进行了编辑,删除了黄色方块,制作了我自己的模板,两者都是用油漆完成的(请不要评判我)。然后我尝试了你的代码,效果很好。很难说为什么它在你的案例中不起作用,但如果我猜我不得不说它与你的模板有关。当你说你有一个透明的png图片是指它是完全透明的(甚至在黑色边框内)还是仅仅是周围的?如果第一种情况为真,尝试制作一个中间填充了白色像素的模板,就像原始图像一样

您的代码:

import cv2
import numpy as np

img = cv2.imread('pawn.png')

# Standard settings
img_rgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
img_gray = cv2.cvtColor(img_rgb,cv2.COLOR_BGR2GRAY)

# White Pawn Template
pawn_white_template = cv2.imread("pawn_white2.png",0)

w_pawn_white, h_pawn_white = pawn_white_template.shape[::-1]

res_pawn_white = cv2.matchTemplate(img_gray,pawn_white_template,cv2.TM_CCOEFF_NORMED)

threshhold = 0.6
loc = np.where(res_pawn_white >= threshhold)

for pt in zip(*loc[::-1]):
    cv2.rectangle(img_rgb,pt,(pt[0]+w_pawn_white, pt[1]+h_pawn_white),(0,255,255),1)

cv2.imshow('detected',img_rgb)
结果:

我的原始img:

我的模板:


请发布示例图像。@Alexander Reynolds okI的问题与您完全相同(字面上是一样的;下棋时不检测棋子,只显示暗格中的棋子)。你是怎么解决的?我想这是因为图像的大小。我发布了我的模板,我认为在matchTemplate中,这个尺寸必须是精确的。否则,您将不得不调整您的投资回报率。或者简单地调整模板的大小查看这篇文章了解多尺度