Visual Vibration Tracking 0.2
Загрузка...
Поиск...
Не найдено
camera_calibrator.h
1#ifndef CAMERA_CALIBRATOR_H
2#define CAMERA_CALIBRATOR_H
3
4// OpenCV headers
5#include <fstream>
6#include <iostream>
7#include <opencv2/opencv.hpp>
8#include <string>
9#include <vector>
10#include <sstream>
11#include <memory>
12#include <thread>
13#include <chrono>
14
15// my headers
16#include "CamCalib\video_undistorter.h"
17#include "VVT-V2/helper.h"
18
19constexpr auto EXTENTION = ".JPG";
20
21using namespace cv;
22
30{
31public:
37 CameraCalibrator(std::string chessboards_path);
39
40 int ExecuteCameraCalibration();
41
42private:
47 int LoadImages(std::string chessboards_path);
53 Mat ReadNextImage(std::string path);
60 void AddTips(Mat& frame, std::string tip);
68 bool FindCorners(Mat input_frame, Size pattern_size, std::vector<Point2f>& corners);
74 void SaveFoundParamsToFile(Mat camera_matrix, Mat dist_coeffs_2be_written);
75
76private:
88 std::vector<Mat> images_with_chessboard_;
92 VideoCapture* input_cap_;
104 std::string winname_;
108 std::string txt_file_name_;
117 std::vector<Mat> rotation_vector_;
118 std::vector<Mat> translation_vector_;
122 std::vector<Point2f> corners_;
126 std::vector<std::vector<Point2f>> vec_of_corners_;
134 double fx_;
138 double fy_;
142 double px_;
146 double py_;
147
148};
149
150#endif
Класс для нахождения коэффициентов для конкретной линзы (с помощью которой было снято видео)
VideoCapture * input_cap_
"Поток" из кадров входного видео (последовательности)
std::vector< Point2f > corners_
Найденные узлы шахматной доски, найденные на конкретном изображении
double frame_height_
Высота кадра
Mat camera_matrix_
Матрица, в которой находятся найденные коэффициенты px, py, cx, cy.
void AddTips(Mat &frame, std::string tip)
По аналогии с FrameHandler::AddTips добавляет подсказки пользователя. В данном случае это - номер тек...
std::vector< Mat > images_with_chessboard_
Вектор загруженных фотографий с шахматными досками
void SaveFoundParamsToFile(Mat camera_matrix, Mat dist_coeffs_2be_written)
Сохраняет найденные параметры (коэффициенты fx, fy, cx, cy), необходимые для удаления дисторсии
std::string winname_
Название окна
Mat distortion_coefficients_
Коэффициенты дисторсии
double py_
Коэффициент матрицы VideoUndistorter::camera_matrix_.
Mat ReadNextImage(std::string path)
Считывает новое изображение и увеличивает переменную chessboard_amount_ на один
double fy_
Коэффициент матрицы VideoUndistorter::camera_matrix_.
double px_
Коэффициент матрицы VideoUndistorter::camera_matrix_.
std::string txt_file_name_
Путь к текстовому файлу, в который будут сохранены найденные коэффициенты
int chessboards_amount_
Количество фотографий шахматных досок (находится в CameraCalibrator::LoadImages)
double fx_
Коэффициент матрицы VideoUndistorter::camera_matrix_.
double frame_width_
Ширина кадра
bool FindCorners(Mat input_frame, Size pattern_size, std::vector< Point2f > &corners)
Находит шахматный паттерн размером, заданным в конструкторе класса (CameraCalibrator::CameraCalibrato...
int LoadImages(std::string chessboards_path)
Загружает фотографии (изображения) шахматных досок в память из пути к папке.
Size pattern_size_
Размер паттерна, по которому будут искаться шахматные доски
std::vector< std::vector< Point2f > > vec_of_corners_
Контейнер для хранения найденных узлов шахматных досок
std::string chessboards_folder_path_
Путь к папке с фотографиями "шахматной доски".