我有代码
img = cv2.imread("poolPictures\chessboard3.jpg", cv2.IMREAD_COLOR)
chessboardImage = cv2.imread("poolPictures\chessboardActual.jpg", cv2.IMREAD_COLOR)
ret, corners = cv2.findChessboardCorners(img, (9,6), None)
cv2.drawChessboardCorners(img, (9,6), corners, ret)
chessRet, chessCorners = cv2.findChessboardCorners(chessboardImage, (9,6), None)
ret, matrix, dist, rvecs, tvecs = cv2.calibrateCamera(corners, chessCorners, chessboardImage.shape[::-1][1:3], None, None)`
Run Code Online (Sandbox Code Playgroud)
运行代码会抛出错误:
ret, matrix, dist, rvecs, tvecs = cv2.calibrateCamera(corners, chessCorners, chessboardImage.shape[::-1][1:3], None, None)
cv2.error: C:\projects\opencv-python\opencv\modules\calib3d\src\calibration.cpp:3110: error: (-210) objectPoints should contain vector of vectors of points of type Point3f in function cv::collectCalibrationData
棋盘3.jpg:
棋盘实际.jpg:
绘制棋盘结果:
我尝试通过引入虚拟第三维将对象点转换为 3 维向量而不是 2 维向量 - 我找不到 Point3f() 的 python 版本。
我还从这里看到https://github.com/opencv/opencv/issues/6002有时错误可能会产生误导,真正的问题是 imagePoints 内的向量之一是空的 - 我尝试打印向量没有一个是空的。
希望有人能帮忙,可能只是拍更多照片的情况......
干杯,
正如 Zenith042 指出的那样,我的图像点和物体点的方向是错误的。然而,主要问题是我的图像点不是使用 numpy 数组,例如:
[[[ 137.5 205. ]]
[[ 143.5 206.5]]
.
.
.
[[ 137.5 209.5]]]
Run Code Online (Sandbox Code Playgroud)
我反而需要:
[[ 137.5 205. ]
[ 143.5 206.5]
.
.
.
[ 137.5 209.5]]]
Run Code Online (Sandbox Code Playgroud)
我通过以下方式实现了这一目标:
ret, corners = cv2.findChessboardCorners(img, (9,6), None)
corners = np.array([[corner for [corner] in corners]])
Run Code Online (Sandbox Code Playgroud)
尽管我怀疑 numpy.reshape 有更好的方法。
我还需要相同的对象点结构,即
objp = np.array([objp])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11172 次 |
| 最近记录: |