如何使用OpenCV Python找到棋盘图案
我们可以使用cv2.findChessboardCorners()在图像中找到棋盘角落,而使用cv2.drawChessboardCorners()可以绘制带有图案的棋盘角落。以下是这两个方法的语法:
ret, corners = cv2.findChessboardCorners(img, patterSize, None)
cv2.drawChessboardCorners(img, patternSize, corners,ret)
步骤
为了在棋盘中找到模式,您可以按照以下步骤进行操作 −
- 导入所需的库。在所有以下示例中,所需的Python库是 OpenCV 。请确保您已经安装了它。
-
使用 cv2.imread() 读取棋盘的输入图像,并使用 cv2.cvtColor() 将其转换为灰度图像。
-
使用 cv2.findChessboardCorners() 在棋盘图像中找到棋盘角点。它返回两个输出参数 ret 和 corners 。 ret 在图像中检测到棋盘角点时为True。 corners 是检测到的棋盘角点的坐标,以(x,y)格式表示。
-
使用 cv2.drawChessboardCorners() 在原始输入图像上绘制棋盘角点和模式。
-
显示带有绘制的棋盘模式的图像,
让我们看一些示例,以更清楚地理解。
输入图像
在下面的示例中,我们将使用此图片作为输入文件。
示例
在这个Python程序中,我们在输入图像中找到模式。
# import required libraries
import cv2
# read input image
img = cv2.imread('left01.jpg')
# convert the input image to a grayscale
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# Find the chess board corners
ret, corners = cv2.findChessboardCorners(gray, (7,6),None)
# if chessboard corners are detected
if ret == True:
# Draw and display the corners
img = cv2.drawChessboardCorners(img, (7,6), corners,ret)
cv2.imshow('Chessboard',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
当我们执行上述代码时,它将产生以下输出窗口-。
示例
在这个Python程序中,我们将看到如何以不同的方式解决相同的问题-。
# import required libraries
import cv2
# read input image
img = cv2.imread('left01.jpg')
# convert the input image to a grayscale
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# Find the chess board corners
ret, corners = cv2.findChessboardCorners(gray, (7,6),None)
# terminating criteria
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
if ret == True:
corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)
# Draw and display the corners
img = cv2.drawChessboardCorners(img, (7,6), corners,ret)
cv2.imshow('Chessboard',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
执行时,它将产生以下 输出 −