1 #include "../lib/common.h" 2 #include "../lib/args.h" 3 #include "../lib/json.h" 4 #include "../lib/camera.h" 5 #include "../lib/dataset.h" 6 #include "../lib/intrinsics.h" 7 #include "../lib/assert.h" 8 #include "../lib/opencv.h" 9 #include "../lib/image_io.h" 10 #include "../lib/filesystem.h" 18 std::vector<vec3> world_corners(cols * rows);
19 for(
int row = 0, idx = 0; row <
rows; ++row)
for(
int col = 0; col <
cols; ++col, ++idx)
20 world_corners[idx] =
vec3((col - cols/2)*square_width, (row - rows/2)*square_width, 0.0);
25 int main(
int argc,
const char* argv[]) {
26 get_args(argc, argv,
"dataset_parameters.json cols rows square_width intr.json out_cameras.json [dataset_group]");
41 #pragma omp parallel for 42 for(std::ptrdiff_t i = 0; i < indices.size(); ++i) {
45 std::cout << i <<
" of " << datas.
indices().size() << std::endl;
47 std::cout <<
'.' << std::flush;
58 std::cout << idx <<
": no image file" << std::endl;
62 cv::Mat_<cv::Vec3b> img;
66 std::cout << idx <<
": could not load image" << std::endl;
72 std::vector<cv::Point2f> corners;
73 int flags = cv::CALIB_CB_FAST_CHECK | cv::CALIB_CB_ADAPTIVE_THRESH;
74 bool found = cv::findChessboardCorners(img, cv::Size(cols, rows), corners, flags);
75 if(!found || corners.size() != cols*
rows) {
76 std::cout << idx <<
": no checkerboard detected" << std::endl;
82 cv::TermCriteria term(cv::TermCriteria::COUNT | cv::TermCriteria::EPS, 100, DBL_EPSILON);
84 cv::cvtColor(img, img_mono, CV_BGR2GRAY);
85 cv::cornerSubPix(img_mono, corners, cv::Size(11, 11), cv::Size(-1, -1), term);
89 std::vector<vec2> image_points = point2f_to_vec2(corners);
92 vec3 rotation_vec, translation;
94 bool ret = cv::solvePnP(
104 std::cout << idx <<
": solvePnP failed" << std::endl;
107 cv::Rodrigues(rotation_vec, rotation);
112 cam.
name = camera_name;
118 cameras.push_back(cam);
120 std::cout << std::endl;
124 std::sort(cameras.begin(), cameras.end(), [](
const camera& a,
const camera& b) {
125 return (a.
name < b.name);
129 std::cout <<
"saving cameras" << std::endl;
void export_cameras_file(const camera_array &cameras, const std::string &filename)
bool file_exists(const std::string &filename)
std::string image_filename() const
dataset_view view(int x) const
cv::Mat_< cv::Vec3b > load_texture(const std::string &filename)
intrinsics intrinsics_arg()
distortion_parameters distortion
cv::Matx< real, 3, 3 > mat33
int main(int argc, const char *argv[])
std::vector< vec3 > checkerboard_world_corners(int cols, int rows, real square_width)
std::string camera_name() const
std::string out_filename_arg()
std::vector< real > cv_coeffs() const
std::vector< camera > camera_array
dataset_group group(const std::string &grp) const
std::vector< view_index > indices() const
std::string string_opt_arg(const std::string &def="")
void get_args(int argc, const char *argv[], const std::string &usage)