Visual Vibration Tracking 0.2
Загрузка...
Поиск...
Не найдено
Открытые члены | Закрытые типы | Закрытые члены | Закрытые статические члены | Закрытые данные | Полный список членов класса
Класс MainMenu

Класс для создания начального меню выбора режима работы программы Подробнее...

#include <main_menu.h>

Открытые члены

 MainMenu (std::string txt_file_name)
 Конструктор этого класса Подробнее...
 

Закрытые типы

enum  MODE { CALIBRATION , UNDISTORTION , VIBRATION_MONITORING , MOVEMENT_ENLARGEMENT }
 Перечисление со списком основных режимов работы Подробнее...
 

Закрытые члены

void LoadPaths ()
 Открывает нужные пути Подробнее...
 
void ExecuteCameraCalibration (std::string chessboards_path)
 Запускает калибровку камеры по картинкам шахматных досок Подробнее...
 
void ExecuteVideoUndistortion (std::string input_file_name, std::string output_file_name)
 Запускает удаление дисторсии Подробнее...
 
void ExecuteVibrationMonitoring (std::string input_file_name, std::string output_file_name)
 Запускает детекцию вибрации (основной режим) Подробнее...
 
void ExecuteMotionMagnification (std::string input_file_name, std::string output_file_name)
 Запускает увеличение движения Подробнее...
 
void CreateMenu ()
 Строит сетку меню с кнопками и надписями на Mat-объекте menu_. Подробнее...
 
void UpdateBtnColorAndText ()
 Раскрашивает кнопки и наносит на них текст Подробнее...
 
void DetectEvent (int event, int x, int y, int flags)
 callback функция для определения события (используется для хэндлинга клика мышью) Подробнее...
 
void Idle ()
 

Закрытые статические члены

static void OnMouse (int event, int x, int y, int flags, void *userdata)
 callback функция для определения события (используется для хэндлинга клика мышью) Подробнее...
 

Закрытые данные

std::string params_file_name_
 Путь файла с параметрами Подробнее...
 
std::string winname_
 Название окна Подробнее...
 
Mat menu_
 Изображение меню, на котором будет происходить отрисовка Подробнее...
 
std::vector< Rect > buttons_
 Контейнер, хранящий в себе прямоугольники-кнопки (фактически тут хранятся координаты кнопок) Подробнее...
 
std::string button_text_ [4]
 Тексты кнопок Подробнее...
 
int menu_width_
 Ширина меню Подробнее...
 
int menu_height_
 Высота меню Подробнее...
 
int button_amount_
 Количество кнопок Подробнее...
 
int button_width_
 Ширина кнопки Подробнее...
 
int button_height_
 Высота кнопки Подробнее...
 
int button_spacing_
 Отступ между кнопками Подробнее...
 
int top_offset_
 Отступ от застаканных кнопок сверху Подробнее...
 
int bottom_offset_
 Отступ от застаканных кнопок снизу Подробнее...
 
int width_offset_
 Отступ с двух сторон от кнопки по ширине Подробнее...
 
int font
 Шрифт Подробнее...
 
double font_scale
 Величина шрифта Подробнее...
 
int thickness
 Толщина шрифта Подробнее...
 
int baseline
 Параметр для cv::getText() Подробнее...
 
Point2i last_mouse_position_
 Последние найденные в callback координаты курсора Подробнее...
 
std::vector< Scalar > buttons_color_
 Контейнер для хранения цвета каждой кнопки Подробнее...
 
bool mode_chosen_
 Флаг выбранного режима Подробнее...
 
bool wanna_quit_
 Флаг выхода из программы Подробнее...
 
std::string input_calibration_video_
 Имя (путь) входного файла (видео) для калибровки Подробнее...
 
std::string input_distorted_video_
 Имя (путь) входного файла (видео) для удаления дисторсии Подробнее...
 
std::string output_undistorted_video_
 Имя (путь) выходного файла (видео) после удаления дисторсии Подробнее...
 
std::string input_vibration_detection_
 Имя (путь) входного файла (видео) для детекции вибрации Подробнее...
 
std::string output_vibration_detection_
 Имя (путь) выходного файла (видео) после детекции вибрации Подробнее...
 
std::string chessboards_path_
 Путь к папке с фотографиями шахматной доски Подробнее...
 
std::string input_movement_enlargment_
 Имя (путь) входного файла (видео) для усиления движения Подробнее...
 
std::string output_movement_enlargement_
 Имя (путь) выходного файла (видео) для усиления движения Подробнее...
 

Подробное описание

Класс для создания начального меню выбора режима работы программы

См. определение в файле main_menu.h строка 25

Перечисления

◆ MODE

enum MainMenu::MODE
private

Перечисление со списком основных режимов работы

См. определение в файле main_menu.h строка 30

31 {
32 CALIBRATION,
33 UNDISTORTION,
34 VIBRATION_MONITORING,
35 MOVEMENT_ENLARGEMENT
36 };

Конструктор(ы)

◆ MainMenu()

MainMenu::MainMenu ( std::string  txt_file_name)

Конструктор этого класса

Аргументы
txt_file_nameимя (путь) текстового документа, содержащий нужные для работы пути к входным и выходным расположениям

См. определение в файле main_menu.cpp строка 3

3 :
4 params_file_name_{ params_file_name },
5 winname_{ MAIN_MENU_WINDOW_NAME },
6 menu_width_{ 500 },
7 menu_height_{ 500 },
9 mode_chosen_{ false }
10{
11 namedWindow(winname_, WINDOW_AUTOSIZE);
12 // Инициализируем отступы
13 int x = 20;
15 top_offset_ = 3 * x;
16 bottom_offset_ = 5 * x;
17 width_offset_ = 3 * x;
20 // Надписи на кнопках
21 button_text_[0] = "CALIBRATION";
22 button_text_[1] = "UNDISTORTION";
23 button_text_[2] = "VIBRATION MONITORING";
24 button_text_[3] = "MOVEMENT ENLARGEMENT";
25 // Инициализируем контейнер цветов кнопок
26 for (int i = 0; i < button_amount_; i++)
27 {
28 buttons_color_.push_back(Scalar(255, 255, 255));
29 }
30 // Инициализируем атрибуты текста
31 font = FONT_HERSHEY_PLAIN;
32 font_scale = 1;
33 thickness = 2;
34 baseline = 0;
35 // Создание меню на Mat-объекте
36 CreateMenu();
37}
int button_height_
Высота кнопки
Definition: main_menu.h:134
int font
Шрифт
Definition: main_menu.h:154
int thickness
Толщина шрифта
Definition: main_menu.h:162
double font_scale
Величина шрифта
Definition: main_menu.h:158
std::string params_file_name_
Путь файла с параметрами
Definition: main_menu.h:98
int button_spacing_
Отступ между кнопками
Definition: main_menu.h:138
void CreateMenu()
Строит сетку меню с кнопками и надписями на Mat-объекте menu_.
Definition: main_menu.cpp:89
std::string button_text_[4]
Тексты кнопок
Definition: main_menu.h:114
int top_offset_
Отступ от застаканных кнопок сверху
Definition: main_menu.h:142
int menu_width_
Ширина меню
Definition: main_menu.h:118
bool mode_chosen_
Флаг выбранного режима
Definition: main_menu.h:179
std::string winname_
Название окна
Definition: main_menu.h:102
int baseline
Параметр для cv::getText()
Definition: main_menu.h:166
int button_width_
Ширина кнопки
Definition: main_menu.h:130
int width_offset_
Отступ с двух сторон от кнопки по ширине
Definition: main_menu.h:150
int button_amount_
Количество кнопок
Definition: main_menu.h:126
std::vector< Scalar > buttons_color_
Контейнер для хранения цвета каждой кнопки
Definition: main_menu.h:175
int menu_height_
Высота меню
Definition: main_menu.h:122
int bottom_offset_
Отступ от застаканных кнопок снизу
Definition: main_menu.h:146

Методы

◆ CreateMenu()

void MainMenu::CreateMenu ( )
private

Строит сетку меню с кнопками и надписями на Mat-объекте menu_.

См. определение в файле main_menu.cpp строка 89

90{
91 // Создадим кнопки в соответствии с их позициями
92 for (int i = 0; i < button_amount_; i++)
93 {
94 buttons_.push_back
95 (
96 Rect(
97 Point2i(
100 ),
101 Point2i(
104 )
105 )
106 );
107 }
108
109 menu_ = Mat(Size(menu_width_, menu_height_), CV_8UC3, Scalar(0, 0, 0));
110
111 // Подсказка для пользователя
112 std::string tip = "Press 'Q' to quit";
113 putText(
114 menu_,
115 tip,
116 Point(
117 (menu_width_ - getTextSize(tip, font, font_scale, thickness, &baseline).width) / 2,
118 menu_height_ - (bottom_offset_ - getTextSize(tip, font, font_scale, thickness, &baseline).height) / 2),
119 font,
121 Scalar(75, 75, 75),
122 thickness / 2,
123 4
124 );
125
126 Idle();
127}
Mat menu_
Изображение меню, на котором будет происходить отрисовка
Definition: main_menu.h:106
void Idle()
Definition: main_menu.cpp:216
std::vector< Rect > buttons_
Контейнер, хранящий в себе прямоугольники-кнопки (фактически тут хранятся координаты кнопок)
Definition: main_menu.h:110

◆ DetectEvent()

void MainMenu::DetectEvent ( int  event,
int  x,
int  y,
int  flags 
)
private

callback функция для определения события (используется для хэндлинга клика мышью)

См. определение в файле main_menu.cpp строка 162

163{
164 // Загружаем названия директорий
165 LoadPaths();
166
167 switch (event)
168 {
169 case EVENT_LBUTTONDOWN:
170 {
171 for (int i = 0; i < buttons_.size(); i++)
172 {
173 // Если клик пользователя был по кнопке
174 if (buttons_[i].contains(Point(x, y)))
175 {
176 switch (i)
177 {
178 case CALIBRATION:
179 {
180 std::cout << "u've chosen camera calibration" << std::endl;
182 break;
183 }
184 case UNDISTORTION:
185 {
186 std::cout << "u've chosen undistortion" << std::endl;
188 break;
189 }
190 case VIBRATION_MONITORING:
191 {
192 std::cout << "u've chosen vibration monitoring" << std::endl;
194 break;
195 }
196 case MOVEMENT_ENLARGEMENT:
197 {
198 std::cout << "u've chosen movement enlarging" << std::endl;
200 break;
201 }
202 }
203 }
204 }
205 break;
206 }
207 case EVENT_MOUSEMOVE:
208 {
211 break;
212 }
213 }
214}
void ExecuteCameraCalibration(std::string chessboards_path)
Запускает калибровку камеры по картинкам шахматных досок
Definition: main_menu.cpp:59
std::string input_vibration_detection_
Имя (путь) входного файла (видео) для детекции вибрации
Definition: main_menu.h:201
std::string output_movement_enlargement_
Имя (путь) выходного файла (видео) для усиления движения
Definition: main_menu.h:217
void ExecuteVideoUndistortion(std::string input_file_name, std::string output_file_name)
Запускает удаление дисторсии
Definition: main_menu.cpp:65
Point2i last_mouse_position_
Последние найденные в callback координаты курсора
Definition: main_menu.h:171
std::string input_distorted_video_
Имя (путь) входного файла (видео) для удаления дисторсии
Definition: main_menu.h:193
std::string output_vibration_detection_
Имя (путь) выходного файла (видео) после детекции вибрации
Definition: main_menu.h:205
void ExecuteMotionMagnification(std::string input_file_name, std::string output_file_name)
Запускает увеличение движения
Definition: main_menu.cpp:83
void ExecuteVibrationMonitoring(std::string input_file_name, std::string output_file_name)
Запускает детекцию вибрации (основной режим)
Definition: main_menu.cpp:77
std::string input_movement_enlargment_
Имя (путь) входного файла (видео) для усиления движения
Definition: main_menu.h:213
void LoadPaths()
Открывает нужные пути
Definition: main_menu.cpp:39
std::string output_undistorted_video_
Имя (путь) выходного файла (видео) после удаления дисторсии
Definition: main_menu.h:197
std::string chessboards_path_
Путь к папке с фотографиями шахматной доски
Definition: main_menu.h:209

◆ ExecuteCameraCalibration()

void MainMenu::ExecuteCameraCalibration ( std::string  chessboards_path)
private

Запускает калибровку камеры по картинкам шахматных досок

Аргументы
chessboards_pathимя (путь) к папке с изображениями шахматных досок

См. определение в файле main_menu.cpp строка 59

60{
61 CameraCalibrator camera_calibrator(chessboards_path);
62 camera_calibrator.ExecuteCameraCalibration();
63}
Класс для нахождения коэффициентов для конкретной линзы (с помощью которой было снято видео)

◆ ExecuteMotionMagnification()

void MainMenu::ExecuteMotionMagnification ( std::string  input_file_name,
std::string  output_file_name 
)
private

Запускает увеличение движения

Аргументы
input_file_nameимя (путь) входного видео
output_file_nameимя (путь) выходного файла

См. определение в файле main_menu.cpp строка 83

84{
85 MovementEnlarger movement_enlarger(input_file_name, output_file_name);
86 movement_enlarger.ExecuteLaplaceEnlargement();
87}
Дочерний (от EulerEnlarger) класс для визуального увеличения вибрации на видео

◆ ExecuteVibrationMonitoring()

void MainMenu::ExecuteVibrationMonitoring ( std::string  input_file_name,
std::string  output_file_name 
)
private

Запускает детекцию вибрации (основной режим)

Аргументы
input_file_nameимя (путь) входного видео
output_file_nameимя (путь) выходного файла

См. определение в файле main_menu.cpp строка 77

78{
79 VibrationDetector vibration_detector(input_file_name, output_file_name, MAIN_WINDOW_NAME);
80 vibration_detector.ExecuteVibrationDetection();
81}
Класс для создания объектов-детекторов вибрации

◆ ExecuteVideoUndistortion()

void MainMenu::ExecuteVideoUndistortion ( std::string  input_file_name,
std::string  output_file_name 
)
private

Запускает удаление дисторсии

Аргументы
input_file_nameимя (путь) входного видео
output_file_nameимя (путь) выходного файла

См. определение в файле main_menu.cpp строка 65

66{
67 std::string params;
68
69 std::cout << "Please attach the parameters.txt file: ";
70 std::cin >> params;
71 std::cout << std::endl;
72
73 VideoUndistorter video_undistorter(input_file_name, output_file_name, params);
74 video_undistorter.ExecuteVideoUndistortion();
75}
Класс для удаления дисторсии на видео

◆ Idle()

void MainMenu::Idle ( )
private

Запускает меню

См. определение в файле main_menu.cpp строка 216

217{
218 // Устанавливаем хэндлер окна
219 setMouseCallback(winname_, OnMouse, (void*)this);
220
221 while (!mode_chosen_)
222 {
223 for (int i = 0; i < buttons_.size(); i++)
224 {
225 if (buttons_[i].contains(last_mouse_position_))
226 {
227 buttons_color_[i] = Scalar(0, 0, 255);
228 }
229 else buttons_color_[i] = Scalar(25, 25, 25);
230 }
231 // Обновляем текущие цвета кнопок
233
234 imshow(winname_, menu_);
235 switch (waitKey(10))
236 {
237 case 'q':
238 {
239 mode_chosen_ = true;
240 break;
241 }
242 }
243 }
244}
void UpdateBtnColorAndText()
Раскрашивает кнопки и наносит на них текст
Definition: main_menu.cpp:129
static void OnMouse(int event, int x, int y, int flags, void *userdata)
callback функция для определения события (используется для хэндлинга клика мышью)
Definition: main_menu.cpp:156

◆ LoadPaths()

void MainMenu::LoadPaths ( )
private

Открывает нужные пути

См. определение в файле main_menu.cpp строка 39

40{
41 std::ifstream params_file;
42 params_file.open(params_file_name_);
43
44 if (!params_file.is_open())
45 {
46 std::cout << "Wrong filename" << std::endl;
47 }
48
49 std::getline(params_file, input_calibration_video_);
50 std::getline(params_file, input_distorted_video_);
51 std::getline(params_file, output_undistorted_video_);
52 std::getline(params_file, input_vibration_detection_);
53 std::getline(params_file, output_vibration_detection_);
54 std::getline(params_file, chessboards_path_);
55 std::getline(params_file, input_movement_enlargment_);
56 std::getline(params_file, output_movement_enlargement_);
57}
std::string input_calibration_video_
Имя (путь) входного файла (видео) для калибровки
Definition: main_menu.h:189

◆ OnMouse()

void MainMenu::OnMouse ( int  event,
int  x,
int  y,
int  flags,
void *  userdata 
)
staticprivate

callback функция для определения события (используется для хэндлинга клика мышью)

См. определение в файле main_menu.cpp строка 156

157{
158 MainMenu* d = static_cast<MainMenu*>(userdata);
159 d->DetectEvent(event, x, y, flags);
160}
Класс для создания начального меню выбора режима работы программы
Definition: main_menu.h:26
void DetectEvent(int event, int x, int y, int flags)
callback функция для определения события (используется для хэндлинга клика мышью)
Definition: main_menu.cpp:162

◆ UpdateBtnColorAndText()

void MainMenu::UpdateBtnColorAndText ( )
private

Раскрашивает кнопки и наносит на них текст

См. определение в файле main_menu.cpp строка 129

130{
131 for (int i = 0; i < button_amount_; i++)
132 {
133 // Рисуем очертания кнопки
134 rectangle(menu_, buttons_[i], buttons_color_[i], FILLED);
135 // Размеры текста в пикселях
136 Size current_text_size = getTextSize(button_text_[i], font, font_scale, thickness, &baseline);
137 // Координаты текущего текста
138 Point text_coordinates = Point(
139 buttons_[i].tl().x + button_width_ / 2 - current_text_size.width / 2,
140 buttons_[i].tl().y + button_height_ / 2 + (current_text_size.height) / 2);
141 // Рисуем текст кнопки
142 putText(
143 menu_,
144 button_text_[i],
145 text_coordinates,
146 font,
148 Scalar(255, 255, 255),
149 thickness,
150 4 // тип линии. вроде отличаются сглаживанием. выбрал 4-й просто так :)
151 );
152
153 }
154}

Данные класса

◆ baseline

int MainMenu::baseline
private

Параметр для cv::getText()

См. определение в файле main_menu.h строка 166

◆ bottom_offset_

int MainMenu::bottom_offset_
private

Отступ от застаканных кнопок снизу

См. определение в файле main_menu.h строка 146

◆ button_amount_

int MainMenu::button_amount_
private

Количество кнопок

См. определение в файле main_menu.h строка 126

◆ button_height_

int MainMenu::button_height_
private

Высота кнопки

См. определение в файле main_menu.h строка 134

◆ button_spacing_

int MainMenu::button_spacing_
private

Отступ между кнопками

См. определение в файле main_menu.h строка 138

◆ button_text_

std::string MainMenu::button_text_[4]
private

Тексты кнопок

См. определение в файле main_menu.h строка 114

◆ button_width_

int MainMenu::button_width_
private

Ширина кнопки

См. определение в файле main_menu.h строка 130

◆ buttons_

std::vector<Rect> MainMenu::buttons_
private

Контейнер, хранящий в себе прямоугольники-кнопки (фактически тут хранятся координаты кнопок)

См. определение в файле main_menu.h строка 110

◆ buttons_color_

std::vector<Scalar> MainMenu::buttons_color_
private

Контейнер для хранения цвета каждой кнопки

См. определение в файле main_menu.h строка 175

◆ chessboards_path_

std::string MainMenu::chessboards_path_
private

Путь к папке с фотографиями шахматной доски

См. определение в файле main_menu.h строка 209

◆ font

int MainMenu::font
private

Шрифт

См. определение в файле main_menu.h строка 154

◆ font_scale

double MainMenu::font_scale
private

Величина шрифта

См. определение в файле main_menu.h строка 158

◆ input_calibration_video_

std::string MainMenu::input_calibration_video_
private

Имя (путь) входного файла (видео) для калибровки

См. определение в файле main_menu.h строка 189

◆ input_distorted_video_

std::string MainMenu::input_distorted_video_
private

Имя (путь) входного файла (видео) для удаления дисторсии

См. определение в файле main_menu.h строка 193

◆ input_movement_enlargment_

std::string MainMenu::input_movement_enlargment_
private

Имя (путь) входного файла (видео) для усиления движения

См. определение в файле main_menu.h строка 213

◆ input_vibration_detection_

std::string MainMenu::input_vibration_detection_
private

Имя (путь) входного файла (видео) для детекции вибрации

См. определение в файле main_menu.h строка 201

◆ last_mouse_position_

Point2i MainMenu::last_mouse_position_
private

Последние найденные в callback координаты курсора

См. определение в файле main_menu.h строка 171

◆ menu_

Mat MainMenu::menu_
private

Изображение меню, на котором будет происходить отрисовка

См. определение в файле main_menu.h строка 106

◆ menu_height_

int MainMenu::menu_height_
private

Высота меню

См. определение в файле main_menu.h строка 122

◆ menu_width_

int MainMenu::menu_width_
private

Ширина меню

См. определение в файле main_menu.h строка 118

◆ mode_chosen_

bool MainMenu::mode_chosen_
private

Флаг выбранного режима

См. определение в файле main_menu.h строка 179

◆ output_movement_enlargement_

std::string MainMenu::output_movement_enlargement_
private

Имя (путь) выходного файла (видео) для усиления движения

См. определение в файле main_menu.h строка 217

◆ output_undistorted_video_

std::string MainMenu::output_undistorted_video_
private

Имя (путь) выходного файла (видео) после удаления дисторсии

См. определение в файле main_menu.h строка 197

◆ output_vibration_detection_

std::string MainMenu::output_vibration_detection_
private

Имя (путь) выходного файла (видео) после детекции вибрации

См. определение в файле main_menu.h строка 205

◆ params_file_name_

std::string MainMenu::params_file_name_
private

Путь файла с параметрами

См. определение в файле main_menu.h строка 98

◆ thickness

int MainMenu::thickness
private

Толщина шрифта

См. определение в файле main_menu.h строка 162

◆ top_offset_

int MainMenu::top_offset_
private

Отступ от застаканных кнопок сверху

См. определение в файле main_menu.h строка 142

◆ wanna_quit_

bool MainMenu::wanna_quit_
private

Флаг выхода из программы

См. определение в файле main_menu.h строка 183

◆ width_offset_

int MainMenu::width_offset_
private

Отступ с двух сторон от кнопки по ширине

См. определение в файле main_menu.h строка 150

◆ winname_

std::string MainMenu::winname_
private

Название окна

См. определение в файле main_menu.h строка 102


Объявления и описания членов классов находятся в файлах: