6 #include "../lib/args.h" 7 #include "../lib/json.h" 8 #include "../lib/obj_img_correspondence.h" 9 #include "../lib/opencv.h" 10 #include "../lib/intrinsics.h" 15 int main(
int argc,
const char* argv[]) {
16 get_args(argc, argv,
"obj_img_cors_set.json image_width image_height out_intrinsics.json [no_distortion]");
23 std::cout <<
"loading obj-img correspondences set" << std::endl;
24 auto cors_set = decode_obj_img_correspondences_set<1, 1>(
import_json_file(obj_img_cors_set_filename));
26 std::cout <<
"preparing input data" << std::endl;
27 std::vector<std::vector<cv::Vec3f>> object_points(cors_set.size());
28 std::vector<std::vector<cv::Vec2f>> image_points(cors_set.size());
29 for(
int set_i = 0; set_i < cors_set.size(); ++set_i) {
30 const auto& cors = cors_set[set_i];
31 auto& obj_points = object_points[set_i];
32 auto& img_points = image_points[set_i];
33 for(
const auto& cor : cors) {
34 obj_points.push_back(cor.object_coordinates[0]);
35 img_points.push_back(cor.image_coordinates[0]);
39 cv::Size image_size(image_width, image_height);
42 std::vector<real> out_distortion(5, 0.0);
44 std::cout <<
"computing calibration" << std::endl;
45 std::vector<cv::Mat> out_rotations, out_translations;
46 const cv::TermCriteria term(cv::TermCriteria::COUNT | cv::TermCriteria::EPS, 50, DBL_EPSILON);
47 int flags = CV_CALIB_ZERO_TANGENT_DIST;
48 if(no_distortion) flags |= CV_CALIB_FIX_K1 | CV_CALIB_FIX_K2 | CV_CALIB_FIX_K3;
49 real err = cv::calibrateCamera(
60 std::cout <<
"reprojection error: " << err << std::endl;
62 std::cout <<
"saving intrinsics" << std::endl;
64 intr.
K = out_camera_mat;
70 intr.
width = image_width;
71 intr.
height = image_height;
74 std::cout <<
"done" << std::endl;
json encode_intrinsics(const intrinsics &intr)
std::string in_filename_arg()
distortion_parameters distortion
cv::Matx< real, 3, 3 > mat33
void export_json_file(const json &j, const std::string &filename, bool compact)
std::string out_filename_arg()
bool bool_opt_arg(const std::string &expected, bool def=false)
json import_json_file(const std::string &filename)
void get_args(int argc, const char *argv[], const std::string &usage)
int main(int argc, const char *argv[])