【发布时间】:2017-03-02 23:28:24
【问题描述】:
我在 Opencv 2.4.11 中执行 stereoCalibrate 时遇到了一个错误,上面写着:
OpenCV Error: Assertion failed (!fixedSize() || ((Mat*)obj)->size.operator()() == Size(cols, rows)) in cv::_OutputArray::create,
我认为这一定是这些参数之间的一些大小误差,它们一一经过。但是还是有错误。我希望有人能从下面的汇编代码中找到错误。这是我代码中的方法调用。
double error = cv::stereoCalibrate(
objPoints, cali0.imgPoints, cali1.imgPoints,
camera0.intr.cameraMatrix, camera0.intr.distCoeffs,
camera1.intr.cameraMatrix, camera1.intr.distCoeffs,
cv::Size(1920,1080), m.rvec, m.tvec, m.evec, m.fvec,
cv::TermCriteria(CV_TERMCRIT_ITER + CV_TERMCRIT_EPS, 100, 1e-5)
,CV_CALIB_FIX_INTRINSIC + CV_CALIB_USE_INTRINSIC_GUESS
);
在我的代码中,m.rvec 是 (3,3,CV_64F),m.tvec 是 (3,1,CV_64F),m.evec 和 m.fvec 没有预先分配,这与 stereoCalibrate 示例相同。 intr.cameraMatrix 是 (3,3,CV_64F),intr.distCoeffs 是 (8,1,CV_64F),objPoints 是从存储角点 3d 位置的棋盘计算出来的,点的所有 z 值都为零。
在阅读了@Josh 的建议后,我将代码修改为 CV_64F 中的普通输出 mat 对象,但它仍然抛出此断言。
cv::Mat R, t, e, f;
double error = cv::stereoCalibrate(
objPoints, cali0.imgPoints, cali1.imgPoints,
camera0.intr.cameraMatrix, camera0.intr.distCoeffs,
camera1.intr.cameraMatrix, camera1.intr.distCoeffs,
cali0.imgSize, R, t, e, f,
cv::TermCriteria(CV_TERMCRIT_ITER + CV_TERMCRIT_EPS, 100, 1e-5));
终于解决了这个问题,提醒一下,确保你传入的相机参数不是const类型....
【问题讨论】:
-
您显示的程序集似乎与您的问题无关。您需要展示一个完整的源代码示例来演示该问题,特别是一个最小的、完整的和可验证的示例。猜测太冒险了,断言失败消息似乎是在说您的
_OutputArray对象之一没有它应该具有的大小。 -
谢谢你,罗斯,你的建议真的很有帮助,这让我开始搜索源代码。这实际上与程序集无关,程序集仅向我显示导致断言的参数的位置。下次我会更加关注这个帖子。 :)
标签: opencv assembly camera-calibration stereo-3d