findChessboardCorners()返回的角点数组的形状

2024-09-30 18:23:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我成功地使用了OpenCV函数findChessboardCorners(),但我对corners返回值的形状感到困惑

下面是我的代码。我已经知道我的棋盘图像有8 x 6个内角

import cv2

nx = 8
ny = 6

img = cv2.imread('test_image2.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, corners = cv2.findChessboardCorners(img, (nx, ny), None)
print(corners.shape)

最后一行打印:(48, 1, 2)

这个1来自哪里?我知道有8*6=48个角点,每个角点都有2个坐标。但是1

documentation for findChessboardCorners()没有说明corners结果:

corners – Output array of detected corners.

Tags: 函数代码图像importimg棋盘cv2opencv
1条回答
网友
1楼 · 发布于 2024-09-30 18:23:30

这是一个不必要的维度,您可以使用numpysqueeze function来消除该维度:

 corners = np.squeeze(corners) 

this documentation中,他们还在注释行中提到“无关的单例维度”:

corners = np.squeeze(corners) # Get rid of extraneous singleton dimension

编辑:

<>我简单地把代码转换成C++边去挖掘。最后,这里是它的代码和控制台输出:

std::ccorners<<corners.rows<<"  "<<corners.cols<<"  "<<corners.dims<<std::endl;

输出:

48 1  2

因此,您得到的输出分别给出:

  • 行数->;角号
  • 列编号->;1作为默认值,因为只有一个数据可提供
  • 矩阵维数->;即2,每行中的数据对数(坐标)

相关问题 更多 >