From 0763819ffcaa530e5e8931365ef1491e986d5224 Mon Sep 17 00:00:00 2001 From: josch Date: Tue, 18 Sep 2012 20:16:01 +0200 Subject: [PATCH] sanitize formatting, use 2 spaces instead of tabs --- calibrate.cc | 171 +++++++++++++++++++++++++++------------------------ 1 file changed, 89 insertions(+), 82 deletions(-) diff --git a/calibrate.cc b/calibrate.cc index fd175fc..2ce6cca 100644 --- a/calibrate.cc +++ b/calibrate.cc @@ -10,7 +10,7 @@ using namespace std; using namespace cv; -enum {INTERACTIVE_MODE, PRESPECIFIED_MODE}; +enum { INTERACTIVE_MODE, PRESPECIFIED_MODE }; #define KEY_ESCAPE 1048603 #define KEY_SPACE 1048608 @@ -19,92 +19,99 @@ enum {INTERACTIVE_MODE, PRESPECIFIED_MODE}; #define COUNT_SQUARES_X 4 #define COUNT_SQUARES_Y 6 -int main(int argc, char** argv) +int main(int argc, char **argv) { - int user_mode; - int specified_boards; - if (argc > 2) - cerr << "Usage: ./calibrate [number of frames]\n"; - else if (argc == 1) - { - user_mode = INTERACTIVE_MODE; - cout << "Camera calibration using interactive behavior. Press SPACE to grab frame.\n"; - } - else - { - user_mode = PRESPECIFIED_MODE; - stringstream ss; ss << argv[1]; - ss >> specified_boards; - cout << "Camera calibration using " << specified_boards << " frames.\n"; - } - - VideoCapture capture(-1); // open the default camera - if (!capture.isOpened()) // check if opening camera stream succeeded - { - cerr << "Camera could not be found. Exiting.\n"; - return -1; - } - - namedWindow("Camera Image", CV_WINDOW_KEEPRATIO); - vector< vector > object_points; - vector< vector > image_points; - - Mat frame, gray_frame; - for(int count = 0; ; ++count) - { - cout << "Frame: " << count << "\n"; - capture >> frame; // get a new frame from camera - cvtColor(frame, gray_frame, CV_BGR2GRAY); - imshow("Camera Image", frame); - - int key_pressed = waitKey(0); - if (key_pressed == KEY_CLOSE_WINDOW || key_pressed == KEY_ESCAPE) break; - - if ((user_mode == INTERACTIVE_MODE && key_pressed == KEY_SPACE) || - user_mode == PRESPECIFIED_MODE && count < specified_boards) - { - Size pattern_size(COUNT_SQUARES_X, COUNT_SQUARES_Y); //interior number of corners - vector corners; //this will be filled by the detected corners - bool pattern_found = findChessboardCorners( gray_frame, pattern_size, corners, CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE + CALIB_CB_FAST_CHECK); - - if (pattern_found) // to tweak params: http://bit.ly/QyoU3k - { - cornerSubPix(gray_frame, corners, Size(11, 11), Size(-1, -1), TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1)); - drawChessboardCorners(frame, pattern_size, Mat(corners), pattern_found); - - vector< Point3f > obj; - for(int j = 0; j < COUNT_SQUARES_X * COUNT_SQUARES_Y; ++j) - obj.push_back(Point3f(j/COUNT_SQUARES_X, j%COUNT_SQUARES_X, 0.0f)); - - image_points.push_back(corners); - object_points.push_back(obj); - cout << "Frame " << count << " grabbed.\n"; - } - } - - } - - - Mat intrinsic = Mat(3, 3, CV_32FC1); - Mat distCoeffs; - vector rvecs; - vector tvecs; - - calibrateCamera(object_points, image_points, frame.size(), intrinsic, distCoeffs, rvecs, tvecs); - - Mat imageUndistorted; - while(1) + int user_mode; + int specified_boards; + if (argc > 2) + cerr << "Usage: ./calibrate [number of frames]\n"; + else if (argc == 1) { + user_mode = INTERACTIVE_MODE; + cout << + "Camera calibration using interactive behavior. Press SPACE to grab frame.\n"; + } else { + user_mode = PRESPECIFIED_MODE; + stringstream ss; + ss << argv[1]; + ss >> specified_boards; + cout << "Camera calibration using " << specified_boards << + " frames.\n"; + } + + VideoCapture capture(-1); // open the default camera + if (!capture.isOpened()) // check if opening camera stream succeeded { - capture >> frame; - undistort(frame, imageUndistorted, intrinsic, distCoeffs); - + cerr << "Camera could not be found. Exiting.\n"; + return -1; + } + + namedWindow("Camera Image", CV_WINDOW_KEEPRATIO); + vector < vector < Point3f > >object_points; + vector < vector < Point2f > >image_points; + + Mat frame, gray_frame; + for (int count = 0;; ++count) { + cout << "Frame: " << count << "\n"; + capture >> frame; // get a new frame from camera + cvtColor(frame, gray_frame, CV_BGR2GRAY); + imshow("Camera Image", frame); + + int key_pressed = waitKey(0); + if (key_pressed == KEY_CLOSE_WINDOW || key_pressed == KEY_ESCAPE) + break; + + if ((user_mode == INTERACTIVE_MODE && key_pressed == KEY_SPACE) || + user_mode == PRESPECIFIED_MODE && count < specified_boards) { + Size pattern_size(COUNT_SQUARES_X, COUNT_SQUARES_Y); //interior number of corners + vector < Point2f > corners; //this will be filled by the detected corners + bool pattern_found = + findChessboardCorners(gray_frame, pattern_size, corners, + CALIB_CB_ADAPTIVE_THRESH + + CALIB_CB_NORMALIZE_IMAGE + + CALIB_CB_FAST_CHECK); + + if (pattern_found) // to tweak params: http://bit.ly/QyoU3k + { + cornerSubPix(gray_frame, corners, Size(11, 11), Size(-1, -1), + TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, + 0.1)); + drawChessboardCorners(frame, pattern_size, Mat(corners), + pattern_found); + + vector < Point3f > obj; + for (int j = 0; j < COUNT_SQUARES_X * COUNT_SQUARES_Y; ++j) + obj.push_back(Point3f + (j / COUNT_SQUARES_X, j % COUNT_SQUARES_X, 0.0f)); + + image_points.push_back(corners); + object_points.push_back(obj); + cout << "Frame " << count << " grabbed.\n"; + } + } + + } + + + Mat intrinsic = Mat(3, 3, CV_32FC1); + Mat distCoeffs; + vector < Mat > rvecs; + vector < Mat > tvecs; + + calibrateCamera(object_points, image_points, frame.size(), intrinsic, + distCoeffs, rvecs, tvecs); + + Mat imageUndistorted; + while (1) { + capture >> frame; + undistort(frame, imageUndistorted, intrinsic, distCoeffs); + imshow("win1", frame); imshow("win2", imageUndistorted); - + waitKey(1); } - capture.release(); - // the camera will be deinitialized automatically in VideoCapture destructor - return 0; + capture.release(); + // the camera will be deinitialized automatically in VideoCapture destructor + return 0; }