所以我正在创建一个识别国际象棋动作的程序.到目前为止,我已经实施了相当多的算法来提供最好的结果.我到目前为止所发现的是,对图像进行无失真(使用无失真),然后应用直方图均衡算法,最后使用goodFeaturesToTrack算法(我发现这比哈里斯角点检测更好)的组合产生相当不错的效果结果.这里的目标是让每个广场的每个角落都有一个点.这样,当我应用canny边缘检测时,我可以处理单个方块.

总结上面的链接,我们的想法是找到最左上角,最右上角,最左下角和最右下角的点,并将它们之间的距离除以8.从那里你会想出可能的点,并将它们与实际上在板上的点进行比较.如果其中一个点不匹配,只需替换该点.
我也考虑过某种模式,比如查找相邻点之间的距离并将它们存储在列表中.然后我会执行模式操作以找出最可能的距离并使用它来绘制点.
正如你所看到的,这些点在大多数方块上都相当准确(尽管有些随机点不符合我的要求).我的问题是你认为在棋盘上找到所有角落的最佳方法是什么(我对所有想法都持开放态度)你能给我一些详细的描述(足以引导我朝正确的方向或更多如果你选择:)?此外,(这是次要问题)您是否有任何关于如何进行以便最佳识别移动的建议?我正在尝试实现多种方式,并且我将比较方法以获得最佳结果!谢谢.
所以我试图在棋盘上获得hough线,但算法只能检测到一条线.我正在使用python 2.7和opencv 3.0.这是代码:
def applyHoughLineTransform():
image1 = cv2.imread('pictures/board1.png',0)
image2 = cv2.imread('pictures/board2.png',0)
image3 = cv2.imread('pictures/board3.png')
image4 = cv2.imread('pictures/board4.png')
lines1 = cv2.HoughLines(image1,1,math.pi/180.0,5)
lines2 = cv2.HoughLines(image2,1,math.pi/180.0,5)
lines1 = lines1[0]
lines2 = lines2[0]
for rho,theta in lines1:
print ('Rho and theta:',rho,theta)
a = np.cos(theta)
b = np.sin(theta)
x0 = a*rho
y0 = b*rho
x1 = int(x0 + 1000*(-b))
y1 = int(y0 + 1000*(a))
x2 = int(x0 - 1000*(-b))
y2 = int(y0 - 1000*(a))
print (x1,y1)
print (x2,y2)
cv2.line(image3,(x1,y1),(x2,y2),(0,0,255),2)
for rho,theta in lines2:
a = …Run Code Online (Sandbox Code Playgroud) 当尝试在 opencv 中将图像转换为灰度时,我收到以下错误消息,可以在此处看到: https: //i.stack.imgur.com/9C3kg.png
这是代码:
import cv2
img = cv2.imread('pictures\chessBoard.png',0)
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Run Code Online (Sandbox Code Playgroud)
这些错误消息非常神秘,尤其是对于 opencv 新手来说。谢谢您的帮助!