断言失败 CV_Assert( CV_IS_MAT(objectPoints) && CV_IS_MAT(imagePoints) && CV_IS_MAT(A) && CV_IS_MAT(rvec) && CV_IS_MAT(tvec) )

csg

我校准了相机并获得了 0.17 的重投影误差,文件保存为camera.yml. 然后,我将这个文件导入到我的 aruco 检测算法中,当我运行这个算法时,一切都很好,直到检测到 aruco 标记,但是,一旦检测到 aruco 标记,代码就会抛出以下错误并停止运行。

cv exception: OpenCV(3.4.2) error: (-215:Assertion failed) (((objectPoints) != __null && (((const CvMat*)(objectPoints))->type & 0xFFFF0000) == 0x42420000 && ((const CvMat*)(objectPoints))->cols > 0 && ((const CvMat*)(objectPoints))->rows > 0) && ((const CvMat*)(objectPoints))->data.ptr != __null) && (((imagePoints) != __null && (((const CvMat*)(imagePoints))->type & 0xFFFF0000) == 0x42420000 && ((const CvMat*)(imagePoints))->cols > 0 && ((const CvMat*)(imagePoints))->rows > 0) && ((const CvMat*)(imagePoints))->data.ptr != __null) && (((A) != __null && (((const CvMat*)(A))->type & 0xFFFF0000) == 0x42420000 && ((const CvMat*)(A))->cols > 0 && ((const CvMat*)(A))->rows > 0) && ((const CvMat*)(A))->data.ptr != __null) && (((rvec) != __null && (((const CvMat*)(rvec))->type & 0xFFFF0000) == 0x42420000 && ((const CvMat*)(rvec))->cols > 0 && ((const CvMat*)(rvec))->rows > 0) && ((const CvMat*)(rvec))->data.ptr != __null) && (((tvec) != __null && (((const CvMat*)(tvec))->type & 0xFFFF0000) == 0x42420000 && ((const CvMat*)(tvec))->cols > 0 && ((const CvMat*)(tvec))->rows > 0) && ((const CvMat*)(tvec))->data.ptr != __null) in function 'cvFindExtrinsicCameraParams2'

该错误是由

CV_Assert( CV_IS_MAT(objectPoints) && CV_IS_MAT(imagePoints) && CV_IS_MAT(A) && CV_IS_MAT(rvec) && CV_IS_MAT(tvec) );

可以在 opencv/modules/calib3d/src/calibration.cpp,第 996 行(https://github.com/opencv/opencv/blob/3.4/modules/calib3d/src/calibration.cpp)中找到。

我知道 Rvecs 和 TVecs 是在校准文件的帮助下生成的。看起来校准中的某些内容格式不正确。

我有一个sample.yml属于另一台相机的样本校准文件 ( )。当我在运行 aruco 检测算法时导入该文件时,它运行时没有任何错误。

这些文件的内容(如果您想比较它们)可在此处获得:

我正在使用 OpenCV 3.4.2。

csg

整个问题是两个文件之间命名约定的差异。我将名称从 sample.yml 复制到 camera.yml 并开始工作。有时解决方案就是这么简单。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章