1#include "CamCalib\camera_calibrator.h"
4 chessboards_folder_path_{ chessboards_path },
5 winname_{
"Camera Calibrator" }
11 namedWindow(
winname_, WINDOW_NORMAL);
14CameraCalibrator::~CameraCalibrator()
19int CameraCalibrator::ExecuteCameraCalibration()
21 std::cout <<
"Starting camera calibration..." << std::endl;
29 Mat current_image = *it;
32 std::cout <<
"Pattern found" << std::endl;
41 int code = waitKey(20);
61 std::vector<Point3f> object_points;
66 object_points.push_back(Point3f(i, j, 0));
69 std::vector<std::vector<Point3f>> vec_of_object_points(
vec_of_corners_.size());
72 vec_of_object_points[i] = object_points;
76 std::cout <<
"Camera calibration..." << std::endl;
77 float error = calibrateCamera
87 std::cout <<
"Error is " << error << std::endl;
91 for (
int i = 0; i < rotation_vector_.size(); i++)
93 std::cout <<
"rotation_vector_ is " << rotation_vector_[i] << std::endl;
95 for (
int i = 0; i < translation_vector_.size(); i++)
97 std::cout <<
"translation_vector_ is " << translation_vector_[i] << std::endl;
107 Mat image_with_chessboard;
108 std::string image_name = chessboards_path;
117 while (!image_with_chessboard.empty())
120 imshow(
winname_, image_with_chessboard);
123 int code = waitKey(20);
148 image = imread(path);
154 int font = FONT_HERSHEY_PLAIN;
155 double font_scale = 1.5;
161 Point(frame.cols * 0.05, frame.rows * 0.05),
172 if (input_frame.channels() > 2)
173 cvtColor(input_frame, input_frame, COLOR_BGR2GRAY);
175 input_frame.copyTo(gray_frame);
177 bool pattern_found = findChessboardCorners
182 CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE + CALIB_CB_FAST_CHECK
191 TermCriteria(TermCriteria::EPS + TermCriteria::COUNT, 40, 0.001)
194 return pattern_found;
201 fx_ = camera_matrix.at<
double>(0, 0);
202 fy_ = camera_matrix.at<
double>(1, 1);
203 px_ = camera_matrix.at<
double>(0, 2);
204 py_ = camera_matrix.at<
double>(1, 2);
206 std::vector<double> distortion_coefficients;
207 distortion_coefficients =
209 dist_coeffs_2be_written.at<
double>(0,0),
210 dist_coeffs_2be_written.at<
double>(0,1),
211 dist_coeffs_2be_written.at<
double>(0,2),
212 dist_coeffs_2be_written.at<
double>(0,3),
213 dist_coeffs_2be_written.at<
double>(0,4)
217 file.open(filename, std::ios::out | std::ios::trunc);
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_
Название окна
CameraCalibrator(std::string chessboards_path)
Конструктор этого класса
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_
Путь к папке с фотографиями "шахматной доски".
std::string GenerateCsvFilename(std::string additional_text="")
Генерирует имя CSV файла для сохранения метаданных
std::string ToStringWithPrecision(const T value, const int n=9)
Выполняет округление числа с определенной точностью