如何使用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 为真。检测到的 corners 是(x,y)格式下的检测到的棋盘格角的坐标。
-
使用 cv2.drawChessboardCorners() 在原始输入图像上绘制棋盘格角和模式。
-
显示带有绘制好的棋盘图案的图像,
让我们看一些示例以更清楚地理解。
输入图像
我们将在下面的示例中使用此图像作为输入文件。
示例
在此Python程序中,我们找到输入图像中的模式。
#导入所需库
import cv2
#读取输入图像
img = cv2.imread('left01.jpg')
#将输入图像转换为灰度
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#查找棋盘格的角落
ret, corners = cv2.findChessboardCorners(gray, (7,6),None)
#如果检测到棋盘格角
if ret == True:
#绘制并显示角
img = cv2.drawChessboardCorners(img, (7,6), corners,ret)
cv2.imshow('棋盘格',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
当我们执行上述代码时,它将生成以下 输出 窗口 −
示例
在此Python程序中,我们将看到如何以不同的方式解决相同的问题。
# 导入所需的库
import cv2
# 读取输入图像
img = cv2.imread('left01.jpg')
# 将输入图像转换为灰度图像
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 查找棋盘格角点
ret, corners = cv2.findChessboardCorners(gray, (7,6),None)
# 终止标准
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)
# 画出并显示角点
img = cv2.drawChessboardCorners(img, (7,6), corners,ret)
cv2.imshow('Chessboard',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
执行后,将会产生以下输出 输出 −