c++ - OpenCV 错误:cv::calibrateCamera 中的断言失败(nimages > 0)
问题描述
我在使用 openCV 的“calibrationCamera”方法时遇到了一些问题。我在 Windows 64、Visual Studio 2013 中运行 OpenCV。
当我从 OpenCV 调用以下函数时出现问题:“cv::calibrateCamera”,它抛出异常“Assertion failed (nimages > 0)”。
这是开发的代码示例:
vector< vector< Vec3f > > _object_points;
vector< vector< Vec2f > > _image_points;
_hor_corners = 9;
_ver_corners = 6;
_squareSize = 20; // Let's say 20 mm
_patternsize = Size(_hor_corners, _ver_corners);
Mat corners;
vector<Vec2f> imgP;
vector< Vec3f > obj;
for (int i = 0; i < _ver_corners; i++) //Create the 3d vector
for (int j = 0; j < _hor_corners; j++)
obj.push_back(Point3f((float)j * _squareSize, (float)i * _squareSize, 0));
for (int i = 0; i < numImages; i++)
{
image = calibImages[i];
// ... code for detecting corners
if (corners.rows == _hor_corners*_ver_corners)
{
_image_points.push_back(imgP); //fill arrays
_object_points.push_back(obj);
cout << imgP.size() << "___" << _image_points.size() << "___" << obj.size() << "___" << _object_points.size() << endl; //here's everything is okay
imgP.clear();
}
}
cv::calibrateCamera(_object_points, _image_points, image.size(), intrinsic, distCoeffs, rvecs, tvecs, 0); //Throw the exception here
这里是断言被抛出的地方:
double cv::calibrateCamera( InputArrayOfArrays _objectPoints,
InputArrayOfArrays _imagePoints,
Size imageSize, InputOutputArray _cameraMatrix, InputOutputArray _distCoeffs,
OutputArrayOfArrays _rvecs, OutputArrayOfArrays _tvecs, int flags, TermCriteria criteria ){
int rtype = CV_64F;
Mat cameraMatrix = _cameraMatrix.getMat();
cameraMatrix = prepareCameraMatrix(cameraMatrix, rtype);
Mat distCoeffs = _distCoeffs.getMat();
distCoeffs = prepareDistCoeffs(distCoeffs, rtype);
if( !(flags & CALIB_RATIONAL_MODEL) &&
(!(flags & CALIB_THIN_PRISM_MODEL)) &&
(!(flags & CALIB_TILTED_MODEL)))
distCoeffs = distCoeffs.rows == 1 ? distCoeffs.colRange(0, 5) : distCoeffs.rowRange(0, 5);
int nimages = int(_objectPoints.total());
CV_Assert( nimages > 0 );
Mat objPt, imgPt, npoints, rvecM, tvecM;
我在互联网上进行了一些搜索,但找不到任何可能的逻辑答案。向量被正确填充并且具有相同的长度。知道这里可能会发生什么吗?
非常感谢,
解决方案
推荐阅读
- apache-spark - python版本的apache beam中pcollection的数据类型是什么?
- laravel - Laravel - 块 + 队列作业 + DB::table()->在创建 4000 个作业后插入冻结
- php - 从文件夹中检索图像
- multithreading - QtConcurred 生成的线程具有与主线程相同的 ID
- javascript - 守望者抓取失败:未检测到更改
- mysql - 尝试通过 Spark 和 JDBC 连接 MySQL 数据库时出错
- scala - 'asInstanceOf[Class[_]]' 是什么意思
- angular - 在 Scala 后端转换从 Angular 收到的 TZ 日期
- javascript - 如何格式化图表中的数字
- file - svn:无法打开文件'/svn/**/db/transactions/59811-1a70.txn/changes':打开的文件太多(已解决)