diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2015-07-20 11:16:54 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2015-07-20 11:16:54 +0200 |
commit | 1248e901aaf4fdb720b3fa201574aa24df4d4524 (patch) | |
tree | 7173b34e1f68a5338b8c0c1ad8c5d33a805bbdbf /opentrack/opencv-calibration.hpp | |
parent | 65966c1497cbcf2c9556a754ab4e1ddef5957cfb (diff) | |
parent | 9cc86cf3569ef6e68c4779ee0d96d1ae4ef77ca6 (diff) |
Merge branch 'unstable' into trackhat-ui
Diffstat (limited to 'opentrack/opencv-calibration.hpp')
-rw-r--r-- | opentrack/opencv-calibration.hpp | 50 |
1 files changed, 34 insertions, 16 deletions
diff --git a/opentrack/opencv-calibration.hpp b/opentrack/opencv-calibration.hpp index 6dee9908..99e6d4c7 100644 --- a/opentrack/opencv-calibration.hpp +++ b/opentrack/opencv-calibration.hpp @@ -1,3 +1,11 @@ +/* Copyright (c) 2015, Stanislaw Halik <sthalik@misaki.pl> + + * Permission to use, copy, modify, and/or distribute this + * software for any purpose with or without fee is hereby granted, + * provided that the above copyright notice and this permission + * notice appear in all copies. + */ + #pragma once #include <QCoreApplication> #include <QString> @@ -6,21 +14,31 @@ #include <opencv2/core.hpp> template<typename = void> -bool get_camera_calibration(const QString& camera_name, cv::Mat& intrinsics, cv::Mat& distortion, int w, int h) +bool get_camera_calibration(const QString& camera_name, cv::Mat& intrinsics, cv::Mat& distortion, int w, int h, int fov) { - QString pathname_ = QCoreApplication::applicationDirPath() + "/camera/" + camera_name + ".yml"; - std::string pathname = pathname_.toStdString(); - cv::FileStorage fs(pathname, cv::FileStorage::READ); - if (!fs.isOpened()) - return false; - cv::Mat intrinsics_, distortion_; - fs["camera_matrix"] >> intrinsics_; - fs["distortion_coefficients"] >> distortion_; - intrinsics_.at<double>(0, 0) *= w / 640.; - intrinsics_.at<double>(2, 0) *= w / 640.; - intrinsics_.at<double>(1, 1) *= h / 480.; - intrinsics_.at<double>(2, 1) *= h / 480.; - intrinsics = intrinsics_; - distortion = distortion_; - return true; + const QString pathnames[] = { + QCoreApplication::applicationDirPath() + "/camera/" + camera_name + "-" + QString::number(fov) + ".yml", + QCoreApplication::applicationDirPath() + "/camera/" + camera_name + ".yml", + }; + for (auto& pathname : pathnames) + { + cv::FileStorage fs(pathname.toStdString(), cv::FileStorage::READ); + if (!fs.isOpened()) + continue; + cv::Mat intrinsics_, distortion_; + fs["camera_matrix"] >> intrinsics_; + fs["distortion_coefficients"] >> distortion_; + int w_, h_; + fs["image_width"] >> w_; + fs["image_height"] >> h_; + double w__ = w_, h__ = h_; + intrinsics_.at<float>(0, 0) *= w / w__; + intrinsics_.at<float>(2, 0) *= w / w__; + intrinsics_.at<float>(1, 1) *= h / h__; + intrinsics_.at<float>(2, 1) *= h / h__; + intrinsics = intrinsics_; + distortion = distortion_; + return true; + } + return false; } |