Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Assertion failed i < 0, in calibrateCamera()

I am getting following error message

OpenCV Error: Assertion failed (i < 0) in create, file /tmp/OpenCV-2.4.0/modules/core/src/matrix.cpp, line 1335 terminate called after throwing an instance of 'cv::Exception' what(): /tmp/OpenCV-2.4.0/modules/core/src/matrix.cpp:1335: error: (-215) i < 0 in function create

while running my code:

What will be possible reasons for this error ?

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <string>
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "cv.h"
#include "highgui.h"

using namespace std;
using namespace cv;

IplImage* src = NULL;

void get2d3dPairs(string fileName,  vector<Point2f> & imgPts, vector<Point3f> & objPts, float z)
{
  //hard coded values; 
  imgPts.push_back(Point2f(144.00,  1011.0));       
  imgPts.push_back(Point2f(237.00,  801.0));     
  imgPts.push_back(Point2f(242.00,  583.0));
  imgPts.push_back(Point2f(271.00,  421.0));
  imgPts.push_back(Point2f(632.00,  1009.0));
  imgPts.push_back(Point2f(607.00,  820.0));
  imgPts.push_back(Point2f(634.00,  600.0));
  imgPts.push_back(Point2f(612.00,  428.0));
  imgPts.push_back(Point2f(1104.00, 1011.0));
  imgPts.push_back(Point2f(1095.00, 837.0));
  imgPts.push_back(Point2f(1107.00, 614.0));
  imgPts.push_back(Point2f(1063.00, 443.0));

  objPts.push_back(Point3f(18.00, 18.00, 0));
  objPts.push_back(Point3f(25.00, 110.00, 0));
  objPts.push_back(Point3f(26.00, 226.00, 0));
  objPts.push_back(Point3f(29.00, 327.00, 0));
  objPts.push_back(Point3f(94.00, 22.00, 0));
  objPts.push_back(Point3f(92.00, 106.00, 0));
  objPts.push_back(Point3f(98.00, 222.00, 0));
  objPts.push_back(Point3f(97.00, 325.00, 0));
  objPts.push_back(Point3f(168.00,  26.00, 0));
  objPts.push_back(Point3f(174.00,  104.0, 0));
  objPts.push_back(Point3f(187.00,  220.0, 0));
  objPts.push_back(Point3f(187.00, 323.00, 0));
  return;
}

int main(int argc, char ** argv)
{
  vector<Point2f> img20, img40, img60, img80;
  vector<Point3f> obj20, obj40, obj60, obj80;

  get2d3dPairs("points_Test_20cm.txt", img20, obj20, 20);
  get2d3dPairs("points_Test_40cm.txt", img40, obj40, 40);
  get2d3dPairs("points_Test_60.txt", img60, obj60, 60);
  get2d3dPairs("points_Test_80cm.txt", img80, obj80, 80);

  vector<vector<Point2f> > imPts;
  vector<vector<Point3f> > obPts;

  imPts.push_back(img20);
  imPts.push_back(img40);
  imPts.push_back(img60);
  imPts.push_back(img80);

  obPts.push_back(obj20);
  obPts.push_back(obj40);
  obPts.push_back(obj60);
  obPts.push_back(obj80);

#if 1
  Mat distortionCoef(4,1,  DataType<double>::type);
  distortionCoef.at<double>(0) = 0;
  distortionCoef.at<double>(1) = 0;
  distortionCoef.at<double>(2) = 0;
  distortionCoef.at<double>(3) = 0;
#endif
  Size imSize(1280, 1024);
  Mat cameraMatrix = initCameraMatrix2D(obPts, imPts, imSize, 0);
  cout << "CamMatrix: " << cameraMatrix << endl;
  Mat rvec, tvec;
  calibrateCamera(obPts, imPts, imSize, cameraMatrix, distortionCoef, rvec, tvec);
}