You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.7 KiB
48 lines
1.7 KiB
#include <opencv2/highgui.hpp> |
|
#include <opencv2/aruco_detector.hpp> |
|
#include <opencv2/calib3d.hpp> |
|
#include <ctime> |
|
|
|
namespace { |
|
inline static bool readCameraParameters(std::string filename, cv::Mat &camMatrix, cv::Mat &distCoeffs) { |
|
cv::FileStorage fs(filename, cv::FileStorage::READ); |
|
if (!fs.isOpened()) |
|
return false; |
|
fs["camera_matrix"] >> camMatrix; |
|
fs["distortion_coefficients"] >> distCoeffs; |
|
return true; |
|
} |
|
|
|
inline static bool saveCameraParams(const std::string &filename, cv::Size imageSize, float aspectRatio, int flags, |
|
const cv::Mat &cameraMatrix, const cv::Mat &distCoeffs, double totalAvgErr) { |
|
cv::FileStorage fs(filename, cv::FileStorage::WRITE); |
|
if (!fs.isOpened()) |
|
return false; |
|
|
|
time_t tt; |
|
time(&tt); |
|
struct tm *t2 = localtime(&tt); |
|
char buf[1024]; |
|
strftime(buf, sizeof(buf) - 1, "%c", t2); |
|
|
|
fs << "calibration_time" << buf; |
|
fs << "image_width" << imageSize.width; |
|
fs << "image_height" << imageSize.height; |
|
|
|
if (flags & cv::CALIB_FIX_ASPECT_RATIO) fs << "aspectRatio" << aspectRatio; |
|
|
|
if (flags != 0) { |
|
sprintf(buf, "flags: %s%s%s%s", |
|
flags & cv::CALIB_USE_INTRINSIC_GUESS ? "+use_intrinsic_guess" : "", |
|
flags & cv::CALIB_FIX_ASPECT_RATIO ? "+fix_aspectRatio" : "", |
|
flags & cv::CALIB_FIX_PRINCIPAL_POINT ? "+fix_principal_point" : "", |
|
flags & cv::CALIB_ZERO_TANGENT_DIST ? "+zero_tangent_dist" : ""); |
|
} |
|
fs << "flags" << flags; |
|
fs << "camera_matrix" << cameraMatrix; |
|
fs << "distortion_coefficients" << distCoeffs; |
|
fs << "avg_reprojection_error" << totalAvgErr; |
|
return true; |
|
} |
|
|
|
}
|
|
|