我正在成功使用 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.
最佳答案
这是一个不需要且不必要的维度,您可以使用 squeeze function 来消除该维度。 numpy 的:
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,每行数据对的数量(坐标)
关于python - findChessboardCorners() 返回的角数组的形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67964604/