【发布时间】:2021-06-03 14:30:31
【问题描述】:
我目前正在为我的国际象棋项目编写一个图像识别脚本,该脚本从棋盘图像中生成一个二维数组。但是,我发现很难找到哪些方格是空的:
到目前为止,我在应用高斯模糊后对我的图像使用了 Canny 边缘检测,得到了以下结果:
我使用的代码是:
sigma = 0.33
v = np.median(img)
img = cv2.GaussianBlur(img, (7, 7), 2) # we use gaussian blur on the image to make it clear.
lower = int(max(0, (1.0 - sigma) * v)) # we find the lower threshold.
upper = int(min(255, (1.0 + sigma) * v)) # we find the higher threshold.
img_edge = cv2.Canny(img, 50, 50) # we use the canny function to edge canny the image.
cv2.imshow('question', img_edge) # we show the image.
cv2.waitKey(0)
(你可能注意到我没有使用我得到的阈值,那是因为我发现它不准确。如果有人有任何提示,我会喜欢的!)
现在,在完成这些步骤之后,我尝试了许多其他方法,例如寻找轮廓、霍夫变换等。但我似乎无法弄清楚如何继续前进并实际找出一个正方形是否为空.
感谢任何帮助!
【问题讨论】:
-
有些方块被部分覆盖,因为 a) 一块在两个方块之间或 b) 透视图使部分看起来覆盖了一个方块 - 您想如何处理这种情况?
-
嗨!感谢您阅读我的帖子。我最初想获得每个正方形的平均颜色,并检查它是否“黑色”/“棕色”足以为空。我不确定这是否现实,或者我是否应该这样做。如果您有任何建议,欢迎提出!
-
不幸的是,棋子的颜色和棋盘格的颜色非常相似......那样会非常困难
-
我明白了。但我指的是在图像上完成精巧边缘之后,我们得到白色的碎片和黑色的棋盘。无论哪种方式,假设我有一块颜色与棋盘格颜色不相似的棋盘,那我该怎么办?
-
说,如果棋盘是黑白的,而棋子是绿蓝的(四种颜色都不同),那么您将图像划分为 8*8 数组并检查平均值的方法颜色会给你很好的结果。但是,请注意,为此,电路板的照片必须与您示例中的照片几乎一样精确。