Merged the trunk r8589:8653 - all changes related to build warnings
This commit is contained in:
@@ -15,7 +15,7 @@ using namespace std;
|
||||
|
||||
enum { DETECTION = 0, CAPTURING = 1, CALIBRATED = 2 };
|
||||
|
||||
void help()
|
||||
static void help()
|
||||
{
|
||||
printf( "\nThis is a camera calibration sample that calibrates 3 horizontally placed cameras together.\n"
|
||||
"Usage: 3calibration\n"
|
||||
@@ -34,7 +34,7 @@ void help()
|
||||
static void calcChessboardCorners(Size boardSize, float squareSize, vector<Point3f>& corners)
|
||||
{
|
||||
corners.resize(0);
|
||||
|
||||
|
||||
for( int i = 0; i < boardSize.height; i++ )
|
||||
for( int j = 0; j < boardSize.width; j++ )
|
||||
corners.push_back(Point3f(float(j*squareSize),
|
||||
@@ -43,7 +43,7 @@ static void calcChessboardCorners(Size boardSize, float squareSize, vector<Point
|
||||
|
||||
static bool run3Calibration( vector<vector<Point2f> > imagePoints1,
|
||||
vector<vector<Point2f> > imagePoints2,
|
||||
vector<vector<Point2f> > imagePoints3,
|
||||
vector<vector<Point2f> > imagePoints3,
|
||||
Size imageSize, Size boardSize,
|
||||
float squareSize, float aspectRatio,
|
||||
int flags,
|
||||
@@ -53,13 +53,13 @@ static bool run3Calibration( vector<vector<Point2f> > imagePoints1,
|
||||
Mat& R12, Mat& T12, Mat& R13, Mat& T13)
|
||||
{
|
||||
int c, i;
|
||||
|
||||
|
||||
// step 1: calibrate each camera individually
|
||||
vector<vector<Point3f> > objpt(1);
|
||||
vector<vector<Point2f> > imgpt;
|
||||
calcChessboardCorners(boardSize, squareSize, objpt[0]);
|
||||
vector<Mat> rvecs, tvecs;
|
||||
|
||||
|
||||
for( c = 1; c <= 3; c++ )
|
||||
{
|
||||
const vector<vector<Point2f> >& imgpt0 = c == 1 ? imagePoints1 : c == 2 ? imagePoints2 : imagePoints3;
|
||||
@@ -71,7 +71,7 @@ static bool run3Calibration( vector<vector<Point2f> > imagePoints1,
|
||||
imgpt.push_back(imgpt0[i]);
|
||||
N += (int)imgpt0[i].size();
|
||||
}
|
||||
|
||||
|
||||
if( imgpt.size() < 3 )
|
||||
{
|
||||
printf("Error: not enough views for camera %d\n", c);
|
||||
@@ -79,13 +79,13 @@ static bool run3Calibration( vector<vector<Point2f> > imagePoints1,
|
||||
}
|
||||
|
||||
objpt.resize(imgpt.size(),objpt[0]);
|
||||
|
||||
|
||||
Mat cameraMatrix = Mat::eye(3, 3, CV_64F);
|
||||
if( flags & CV_CALIB_FIX_ASPECT_RATIO )
|
||||
cameraMatrix.at<double>(0,0) = aspectRatio;
|
||||
|
||||
|
||||
Mat distCoeffs = Mat::zeros(5, 1, CV_64F);
|
||||
|
||||
|
||||
double err = calibrateCamera(objpt, imgpt, imageSize, cameraMatrix,
|
||||
distCoeffs, rvecs, tvecs,
|
||||
flags|CV_CALIB_FIX_K3/*|CV_CALIB_FIX_K4|CV_CALIB_FIX_K5|CV_CALIB_FIX_K6*/);
|
||||
@@ -96,7 +96,7 @@ static bool run3Calibration( vector<vector<Point2f> > imagePoints1,
|
||||
return false;
|
||||
}
|
||||
printf("Camera %d calibration reprojection error = %g\n", c, sqrt(err/N));
|
||||
|
||||
|
||||
if( c == 1 )
|
||||
cameraMatrix1 = cameraMatrix, distCoeffs1 = distCoeffs;
|
||||
else if( c == 2 )
|
||||
@@ -104,18 +104,18 @@ static bool run3Calibration( vector<vector<Point2f> > imagePoints1,
|
||||
else
|
||||
cameraMatrix3 = cameraMatrix, distCoeffs3 = distCoeffs;
|
||||
}
|
||||
|
||||
|
||||
vector<vector<Point2f> > imgpt_right;
|
||||
|
||||
|
||||
// step 2: calibrate (1,2) and (3,2) pairs
|
||||
for( c = 2; c <= 3; c++ )
|
||||
{
|
||||
const vector<vector<Point2f> >& imgpt0 = c == 2 ? imagePoints2 : imagePoints3;
|
||||
|
||||
|
||||
imgpt.clear();
|
||||
imgpt_right.clear();
|
||||
int N = 0;
|
||||
|
||||
|
||||
for( i = 0; i < (int)std::min(imagePoints1.size(), imgpt0.size()); i++ )
|
||||
if( !imagePoints1.empty() && !imgpt0[i].empty() )
|
||||
{
|
||||
@@ -123,13 +123,13 @@ static bool run3Calibration( vector<vector<Point2f> > imagePoints1,
|
||||
imgpt_right.push_back(imgpt0[i]);
|
||||
N += (int)imgpt0[i].size();
|
||||
}
|
||||
|
||||
|
||||
if( imgpt.size() < 3 )
|
||||
{
|
||||
printf("Error: not enough shared views for cameras 1 and %d\n", c);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
objpt.resize(imgpt.size(),objpt[0]);
|
||||
Mat cameraMatrix = c == 2 ? cameraMatrix2 : cameraMatrix3;
|
||||
Mat distCoeffs = c == 2 ? distCoeffs2 : distCoeffs3;
|
||||
@@ -151,7 +151,7 @@ static bool run3Calibration( vector<vector<Point2f> > imagePoints1,
|
||||
R13 = R; T13 = T;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -179,17 +179,17 @@ int main( int argc, char** argv )
|
||||
float squareSize = 1.f, aspectRatio = 1.f;
|
||||
const char* outputFilename = "out_camera_data.yml";
|
||||
const char* inputFilename = 0;
|
||||
|
||||
|
||||
vector<vector<Point2f> > imgpt[3];
|
||||
vector<string> imageList;
|
||||
|
||||
|
||||
if(argc < 2)
|
||||
{
|
||||
help();
|
||||
return 1;
|
||||
help();
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
for( i = 1; i < argc; i++ )
|
||||
{
|
||||
const char* s = argv[i];
|
||||
@@ -229,11 +229,11 @@ int main( int argc, char** argv )
|
||||
else if( s[0] != '-' )
|
||||
{
|
||||
inputFilename = s;
|
||||
}
|
||||
}
|
||||
else
|
||||
return fprintf( stderr, "Unknown option %s", s ), -1;
|
||||
}
|
||||
|
||||
|
||||
if( !inputFilename ||
|
||||
!readStringList(inputFilename, imageList) ||
|
||||
imageList.size() == 0 || imageList.size() % 3 != 0 )
|
||||
@@ -241,7 +241,7 @@ int main( int argc, char** argv )
|
||||
printf("Error: the input image list is not specified, or can not be read, or the number of files is not divisible by 3\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
Mat view, viewGray;
|
||||
Mat cameraMatrix[3], distCoeffs[3], R[3], P[3], R12, T12;
|
||||
for( k = 0; k < 3; k++ )
|
||||
@@ -252,13 +252,13 @@ int main( int argc, char** argv )
|
||||
distCoeffs[k] = Mat_<double>::zeros(5,1);
|
||||
}
|
||||
Mat R13=Mat_<double>::eye(3,3), T13=Mat_<double>::zeros(3,1);
|
||||
|
||||
|
||||
FileStorage fs;
|
||||
namedWindow( "Image View", 0 );
|
||||
|
||||
|
||||
for( k = 0; k < 3; k++ )
|
||||
imgpt[k].resize(imageList.size()/3);
|
||||
|
||||
|
||||
for( i = 0; i < (int)(imageList.size()/3); i++ )
|
||||
{
|
||||
for( k = 0; k < 3; k++ )
|
||||
@@ -266,14 +266,14 @@ int main( int argc, char** argv )
|
||||
int k1 = k == 0 ? 2 : k == 1 ? 0 : 1;
|
||||
printf("%s\n", imageList[i*3+k].c_str());
|
||||
view = imread(imageList[i*3+k], 1);
|
||||
|
||||
|
||||
if(view.data)
|
||||
{
|
||||
vector<Point2f> ptvec;
|
||||
imageSize = view.size();
|
||||
cvtColor(view, viewGray, CV_BGR2GRAY);
|
||||
bool found = findChessboardCorners( view, boardSize, ptvec, CV_CALIB_CB_ADAPTIVE_THRESH );
|
||||
|
||||
|
||||
drawChessboardCorners( view, boardSize, Mat(ptvec), found );
|
||||
if( found )
|
||||
{
|
||||
@@ -287,36 +287,36 @@ int main( int argc, char** argv )
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
printf("Running calibration ...\n");
|
||||
|
||||
|
||||
run3Calibration(imgpt[0], imgpt[1], imgpt[2], imageSize,
|
||||
boardSize, squareSize, aspectRatio, flags|CV_CALIB_FIX_K4|CV_CALIB_FIX_K5,
|
||||
cameraMatrix[0], distCoeffs[0],
|
||||
cameraMatrix[1], distCoeffs[1],
|
||||
cameraMatrix[2], distCoeffs[2],
|
||||
R12, T12, R13, T13);
|
||||
|
||||
|
||||
fs.open(outputFilename, CV_STORAGE_WRITE);
|
||||
|
||||
|
||||
fs << "cameraMatrix1" << cameraMatrix[0];
|
||||
fs << "cameraMatrix2" << cameraMatrix[1];
|
||||
fs << "cameraMatrix3" << cameraMatrix[2];
|
||||
|
||||
|
||||
fs << "distCoeffs1" << distCoeffs[0];
|
||||
fs << "distCoeffs2" << distCoeffs[1];
|
||||
fs << "distCoeffs3" << distCoeffs[2];
|
||||
|
||||
|
||||
fs << "R12" << R12;
|
||||
fs << "T12" << T12;
|
||||
fs << "R13" << R13;
|
||||
fs << "T13" << T13;
|
||||
|
||||
|
||||
fs << "imageWidth" << imageSize.width;
|
||||
fs << "imageHeight" << imageSize.height;
|
||||
|
||||
|
||||
Mat Q;
|
||||
|
||||
|
||||
// step 3: find rectification transforms
|
||||
double ratio = rectify3Collinear(cameraMatrix[0], distCoeffs[0], cameraMatrix[1],
|
||||
distCoeffs[1], cameraMatrix[2], distCoeffs[2],
|
||||
@@ -325,27 +325,27 @@ int main( int argc, char** argv )
|
||||
R[0], R[1], R[2], P[0], P[1], P[2], Q, -1.,
|
||||
imageSize, 0, 0, CV_CALIB_ZERO_DISPARITY);
|
||||
Mat map1[3], map2[3];
|
||||
|
||||
|
||||
fs << "R1" << R[0];
|
||||
fs << "R2" << R[1];
|
||||
fs << "R3" << R[2];
|
||||
|
||||
|
||||
fs << "P1" << P[0];
|
||||
fs << "P2" << P[1];
|
||||
fs << "P3" << P[2];
|
||||
|
||||
|
||||
fs << "disparityRatio" << ratio;
|
||||
fs.release();
|
||||
|
||||
|
||||
printf("Disparity ratio = %g\n", ratio);
|
||||
|
||||
|
||||
for( k = 0; k < 3; k++ )
|
||||
initUndistortRectifyMap(cameraMatrix[k], distCoeffs[k], R[k], P[k], imageSize, CV_16SC2, map1[k], map2[k]);
|
||||
|
||||
|
||||
Mat canvas(imageSize.height, imageSize.width*3, CV_8UC3), small_canvas;
|
||||
destroyWindow("view");
|
||||
canvas = Scalar::all(0);
|
||||
|
||||
|
||||
for( i = 0; i < (int)(imageList.size()/3); i++ )
|
||||
{
|
||||
canvas = Scalar::all(0);
|
||||
@@ -354,10 +354,10 @@ int main( int argc, char** argv )
|
||||
int k1 = k == 0 ? 2 : k == 1 ? 0 : 1;
|
||||
int k2 = k == 0 ? 1 : k == 1 ? 0 : 2;
|
||||
view = imread(imageList[i*3+k], 1);
|
||||
|
||||
|
||||
if(!view.data)
|
||||
continue;
|
||||
|
||||
|
||||
Mat rview = canvas.colRange(k2*imageSize.width, (k2+1)*imageSize.width);
|
||||
remap(view, rview, map1[k1], map2[k1], CV_INTER_LINEAR);
|
||||
}
|
||||
@@ -370,6 +370,6 @@ int main( int argc, char** argv )
|
||||
if( c == 27 || c == 'q' || c == 'Q' )
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user