如何使用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()
执行后,将生成以下输出:
广告