如何使用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()查找棋盘图像中的棋盘角点。它返回两个输出参数retcorners。如果在图像中检测到棋盘角点,则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()

执行后,将生成以下输出


更新于:2022年12月5日

8K+ 次浏览

启动你的职业生涯

通过完成课程获得认证

开始
广告