1#include "CamCalib\video_undistorter.h"
4 input_file_name_{ input_file_name },
5 output_file_name_{ output_file_name },
6 txt_file_name_{ txt_file_name },
7 winname_{
"Undistortion" }
19 cv::VideoWriter::fourcc(
'm',
'p',
'4',
'v'),
24 namedWindow(
winname_, WINDOW_NORMAL);
27VideoUndistorter::~VideoUndistorter()
54 std::cout <<
"Processing frame " <<
input_cap_->get(CAP_PROP_POS_FRAMES) <<
"/" <<
frame_count_ << std::endl;
63 int code = waitKey(20);
82 std::cout <<
"Undistortion completed" << std::endl;
88 int font = FONT_HERSHEY_PLAIN;
89 double font_scale = 1.5;
95 Point(frame.cols * 0.05, frame.rows * 0.05),
111 std::vector<double> dist;
115 std::vector<std::vector<double>> read_data;
117 file.open(txt_file_name);
120 std::cout <<
"Param file opened" << std::endl;
125 std::vector<std::string> delimited_line =
SplitString(line,
";");
126 delimited_line.erase(delimited_line.begin());
128 std::vector<double> data;
130 for (
int i = 0; i < delimited_line.size(); i++)
132 data.push_back(std::stod(delimited_line[i]));
134 read_data.push_back(data);
140 fx_ = read_data[0][0];
141 fy_ = read_data[1][0];
142 px_ = read_data[2][0];
143 py_ = read_data[3][0];
144 dist = { read_data[4][0], read_data[4][1], read_data[4][2], read_data[4][3], read_data[4][4] };
146 std::vector<double> intrin_arr = {
fx_, 0,
px_, 0,
fy_,
py_, 0, 0, 1 };
159 int start_position = 0;
161 int delimiter_length = delimiter.length();
164 std::vector<std::string> left;
166 while ((end_position = input_string.find(delimiter, start_position)) != std::string::npos) {
167 token = input_string.substr(start_position, end_position - start_position);
168 start_position = end_position + delimiter_length;
169 left.push_back(token);
172 left.push_back(input_string.substr(start_position));
void AddTips(Mat &frame, std::string tip)
По аналогии с FrameHandler::AddTips добавляет подсказки пользователя. В данном случае это - номер тек...
int ExecuteVideoUndistortion()
Основная часть. Выполняет удаление дисторсии из видео
double fy_
Коэффициент матрицы VideoUndistorter::camera_matrix_.
double frame_height_
Ширина кадра (входного и выходного)
VideoCapture * input_cap_
"Поток" из кадров входного видео (последовательности)
double px_
Коэффициент матрицы VideoUndistorter::camera_matrix_.
double frame_width_
Ширина кадра (входного и выходного)
double fps_
ФПС входного видео
Mat current_frame_
Текущий кадр с дисторсией
double frame_count_
Количество кадров входного видео
Mat camera_matrix_
Та самая матрица, присущая конкретной паре - линща + камера.
Mat distortion_coefficients_
Коэффициенты дисторсии
double py_
Коэффициент матрицы VideoUndistorter::camera_matrix_.
double fx_
Коэффициент матрицы VideoUndistorter::camera_matrix_.
VideoUndistorter(std::string input_file_name_, std::string output_file_name, std::string txt_file_name)
Конструктор этого класса
VideoWriter * output_cap_
"Поток" из кадров выходного видео (последовательности)
std::string winname_
Название главного окна
void SaveFrame(Mat frame)
Сохраняет кадр в выходную последовательность (видео)
void LoadFoundParamsFromFile(std::string txt_file_name)
Загружает параметры (коэффициенты fx, fy, cx, cy), необходимые для удаления дисторсии....
std::string output_file_name_
Путь к выходному видео
std::vector< std::string > SplitString(std::string line, std::string delimiter)
Разделяет строку на некоторое количество подстрок по специальному символу - разделителю
Mat undistorted_frame_
Текущий кадр с удалённой дисторсией
std::string txt_file_name_
Путь к файлу с коэффициентами
std::string ToStringWithPrecision(const T value, const int n=9)
Выполняет округление числа с определенной точностью