我试过在open CV python中使用findChessboardCorners
函数。但是它不起作用。这些是我试图让它检测这些图像的图像。board.jpg
:
board2.jpg
:
我希望它能够检测方块的位置以及方块上是否有棋子。
目前为止我试过
import cv2 as cv
import numpy as np
def rescaleFrame(frame, scale=0.75):
#rescale image
width = int(frame.shape[1] * scale)
height = int(frame.shape[0] * scale)
dimensions = (width,height)
return cv.resize(frame, dimensions, interpolation=cv.INTER_AREA)
img = cv.imread("board2.jpg")
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
ret, corners = cv.findChessboardCorners(gray, (8,8),None)
if ret == True:
# Draw and display the corners
img = cv.drawChessboardCorners(img, (8,8), corners,ret)
img=rescaleFrame(img)
cv.imshow("board",img)
v.waitKey(0)
1条答案
按热度按时间hs1ihplo1#
函数findChessboardCorners用于使用白色棋盘图案校准相机。据我所知,它不是设计用于检测棋盘上有棋子的角落。
此站点显示了calibration "chess boards."的示例。this site显示了如何使用这些校准棋盘,此示例使用ROS库。
你仍然可以使用OpenCV,但需要尝试其他功能。假设你自己拍了照片,你也让自己的问题更难,因为你使用了一个有很多线和角的背景,这意味着你必须区分这些角和棋盘上的角。你还可以看到车后面的棋盘顶角被遮挡了。如果你可以重拍照片,我会拍一张自上而下的照片,在一个空白的表面上与棋盘形成对比。
OpenCV中角点检测的一个例子是Harris角点检测。我为你写了一个简短的例子。你需要尝试一下这个和其他角点检测方法,看看哪种效果最好。我发现添加一个索贝尔滤波器来增强图像中的线条会得到更好的结果。但是它仍然会检测到背景中的角点和棋子上的角点。你可以用它来检测角点。我需要弄清楚如何过滤掉这些。