cv2.findChessboardCorners()
该函数试图确定输出图片是否有棋盘图案,并定位棋盘板上的角点。
如果所有的角点被找到且以肯定的顺序排列,该函数会返回一个非零值。
而如果该函数没有找到所有的角点或者重新排列他们,则返回0。
参数:image: 输出原始的棋盘板图像。该图像必须是一张8位的灰度图或色调图。patternSize:(w,h), 棋盘上每一排和每一列的内角数。 w=棋盘板一行上黑白块的数量-1,h=棋盘板一列上黑白块的数量-1, 例如:10x6的棋盘板,则(w,h)=(9,5)corners:array, 检测到的角点的输入数组。flags:int, 不同的操作标记,可能为0,None或者下述值的组合: CALIB_CB_ADAPTIVE_THRESH: 应用自适应阈值法把图像转换为黑白图,而不是应用一个固定的阈值。 CALIB_CB_NORMALIZE_IMAGE: 在利用固定阈值或自适应阈值法二值化图像之前,利用直方图均衡化图像。 CALIB_CB_FILTER_QUADS: 应用额定的规范(如轮廓面积,周长,正方形形态)来过滤掉在轮廓检索阶段提取的假四边形。 CALIB_CB_FAST_CHECK: 对图像运行一个疾速查看机制以查找棋盘板的角点, 如果没有找到角点则返回一个快捷揭示。 当没有察看到棋盘时,能够极大地放慢在进化条件下的调用。
实际:
试着对以下图片进行操作:
import numpy as npimport cv2import matplotlib.pyplot as pltimport matplotlib.image as mpimgfname='calibration_test.png'image=cv2.imread(fname)# plt.imshow(image)# plt.show()gray=cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)plt.imshow(gray,cmap='gray')plt.show()# Find the chessboard cornersnx=8ny=6ret, corners = cv2.findChessboardCorners(gray, (nx, ny), None)print('ret:',ret)# print(len(corners))# If found, draw cornersif ret == True: # Draw and display the corners cv2.drawChessboardCorners(image, (nx, ny), corners, ret) plt.imshow(image)