summaryrefslogtreecommitdiffhomepage
path: root/opentrack/opencv-calibration.hpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2015-07-20 11:16:54 +0200
committerStanislaw Halik <sthalik@misaki.pl>2015-07-20 11:16:54 +0200
commit1248e901aaf4fdb720b3fa201574aa24df4d4524 (patch)
tree7173b34e1f68a5338b8c0c1ad8c5d33a805bbdbf /opentrack/opencv-calibration.hpp
parent65966c1497cbcf2c9556a754ab4e1ddef5957cfb (diff)
parent9cc86cf3569ef6e68c4779ee0d96d1ae4ef77ca6 (diff)
Merge branch 'unstable' into trackhat-ui
Diffstat (limited to 'opentrack/opencv-calibration.hpp')
-rw-r--r--opentrack/opencv-calibration.hpp50
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;
}