summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2015-07-13 19:04:22 +0200
committerStanislaw Halik <sthalik@misaki.pl>2015-07-13 19:04:30 +0200
commit279d6c1b0534edd7c49f2f1fbf56acf9ed1c4a21 (patch)
tree7a89a52bace10932625e47320c77d3e661fc2b9c
parentedfde661b2d1ff0b891056b22dc7ca2f92b62206 (diff)
allow for camera calibration
-rw-r--r--CMakeLists.txt2
-rw-r--r--bin/camera/Logitech HD Webcam C525.yml22
-rw-r--r--bin/camera/PS3Eye Camera.yml22
-rw-r--r--opentrack/opencv-calibration.hpp26
4 files changed, 72 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2c38b4d2..8a14b81f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -542,6 +542,8 @@ if(WIN32)
install(FILES "${CMAKE_SOURCE_DIR}/bin/cleye.config" DESTINATION .)
endif()
+install(DIRECTORY "${CMAKE_SOURCE_DIR}/bin/camera" DESTINATION .)
+
if(APPLE)
install(CODE "
execute_process(COMMAND /bin/sh \"${CMAKE_SOURCE_DIR}/install-fail-tool\" \"${CMAKE_INSTALL_PREFIX}\")
diff --git a/bin/camera/Logitech HD Webcam C525.yml b/bin/camera/Logitech HD Webcam C525.yml
new file mode 100644
index 00000000..ac1bc981
--- /dev/null
+++ b/bin/camera/Logitech HD Webcam C525.yml
@@ -0,0 +1,22 @@
+%YAML:1.0
+calibration_time: "07/13/15 17:32:58"
+image_width: 640
+image_height: 480
+board_width: 24
+board_height: 15
+square_size: 1.
+flags: 0
+camera_matrix: !!opencv-matrix
+ rows: 3
+ cols: 3
+ dt: d
+ data: [ 7.1195238148354849e+002, 0., 3.4210284784635138e+002, 0.,
+ 7.1302752784110055e+002, 2.2837679451205264e+002, 0., 0., 1. ]
+distortion_coefficients: !!opencv-matrix
+ rows: 5
+ cols: 1
+ dt: d
+ data: [ -1.5165615866415242e-003, 3.6806867018034255e-002,
+ -6.6432394998828278e-004, 1.7782694073348656e-003,
+ -4.9225052904494471e-001 ]
+avg_reprojection_error: 2.5310746466741296e+000
diff --git a/bin/camera/PS3Eye Camera.yml b/bin/camera/PS3Eye Camera.yml
new file mode 100644
index 00000000..6859d0fb
--- /dev/null
+++ b/bin/camera/PS3Eye Camera.yml
@@ -0,0 +1,22 @@
+%YAML:1.0
+calibration_time: "07/13/15 17:45:33"
+image_width: 640
+image_height: 480
+board_width: 24
+board_height: 15
+square_size: 1.
+flags: 0
+camera_matrix: !!opencv-matrix
+ rows: 3
+ cols: 3
+ dt: d
+ data: [ 7.5119574967224673e+002, 0., 3.2806930334341007e+002, 0.,
+ 7.5112907969240291e+002, 2.2681331450818737e+002, 0., 0., 1. ]
+distortion_coefficients: !!opencv-matrix
+ rows: 5
+ cols: 1
+ dt: d
+ data: [ -2.2741190107950382e-001, 9.4372681451250684e-001,
+ -4.0955586655475494e-003, -2.6778551080439902e-003,
+ -1.7969804313130640e+000 ]
+avg_reprojection_error: 1.9233386799903629e+000
diff --git a/opentrack/opencv-calibration.hpp b/opentrack/opencv-calibration.hpp
new file mode 100644
index 00000000..6dee9908
--- /dev/null
+++ b/opentrack/opencv-calibration.hpp
@@ -0,0 +1,26 @@
+#pragma once
+#include <QCoreApplication>
+#include <QString>
+#include <QByteArray>
+#include <string>
+#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)
+{
+ 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;
+}