Visual Vibration Tracking 0.2
Загрузка...
Поиск...
Не найдено
lonely_point_handler.cpp
1#include "VVT-V2/lonely_point_handler.h"
2
3LonelyPointHandler::LonelyPointHandler(Point2f init_coordinates, double sampling_rate, int point_id, float text_resize_factor, std::string output_csv_filename) :
4 Histogram{ 600, 300, sampling_rate / 2, point_id, x_, y_ },
5 OutputToCsv{ output_csv_filename, point_coordinates_, point_time_coordinates_, point_id },
6 point_id_{ point_id },
7 text_resize_factor_{ text_resize_factor }
8{
10 sampling_rate_ = sampling_rate;
11
12 // Добавляем первые координаты клика мышью
13 point_coordinates_.push_back(init_coordinates);
14 interaction_box_ = Rect(
15 Point2i(init_coordinates.x - interaction_offset_, init_coordinates.y - interaction_offset_),
16 Point2i(init_coordinates.x + interaction_offset_, init_coordinates.y + interaction_offset_)
17 );
18 interacted_ = false;
19
20 frequencies_.push_back(0.0);
21 relative_amplitude_ = Point3f(0.0, 0.0, 0.0);
22
23 sensivity_ = 0.01;
25}
26
28{
29 Write();
30}
31
33{
34 if (!point_coordinates_.empty())
35 return point_coordinates_[0];
36 else return Point2f(0.0, 0.0);
37}
38
40{
41 return interaction_box_;
42}
43
45{
46 // default
47 point_color_ = Scalar(255, 75, 25);
48
49 if (interacted_)
50 point_color_ = point_color_ + Scalar(0, 75, 25); // синий светлее
51
53}
54
56{
57 // отрисовываем прямоугольник взаимодействия (если оно есть)
59 // отрисовываем линии точек
60 DrawPointTrack(frame);
61 // отрисовываем круг вокруг точки
62 DrawPoint(frame);
63 // отрисовываем гистограмму
65 // отрисовываем частоту вибрации
66 DrawTextData(frame);
67}
68
70{
72 {
76 }
77}
78
80{
82 // отрисовываем круг вокруг точки
83 circle(frame, point_coordinates_.back(), 10, point_color_, 2);
84
85}
86
88{
89 if (point_coordinates_.size() > 2)
90 line(frame, point_coordinates_[point_coordinates_.size() - 2], point_coordinates_[point_coordinates_.size() - 1], Scalar(0, 255, 0), 1, LINE_AA);
91}
92
94{
95 if (interacted_)
96 rectangle(frame, interaction_box_, Scalar(0, 255, 0), 2);
97}
98
100{
101 int font = FONT_HERSHEY_PLAIN;
102 double font_scale = 1.5 * text_resize_factor_;
103 int thickness = 2;
104 int line_spacing = 20;
105 int row_spacing = 5;
106 // Количество строк частот, выводимых на экран
107 int lines_amount = 3;
108 int baseline;
109 // отрисовываем частоту вибрации
110 putText(
111 frame,
113 Point(point_coordinates_.front().x + 15, point_coordinates_.front().y + text_resize_factor_ * line_spacing),
114 font,
115 font_scale,
116 Scalar(0, 69, 255),
117 thickness
118 );
119
120 // отрисовываем амплитуды вибрации и ID точки
121 // ID точки
122 putText(
123 frame,
124 "ID: " + std::to_string(point_id_),
125 Point(point_coordinates_.front().x + 15, point_coordinates_.front().y - text_resize_factor_ * line_spacing),
126 font,
127 font_scale,
128 Scalar(100, 255, 100),
129 thickness
130 );
131
132 // Статус определения вибрации
133
134 std::string confidence_string;
135
136 {
137 if (confidence_level_ > 5.0)
138 confidence_string = "enough";
139 else
141 }
142
143 putText(
144 frame,
145 "Conf: " + confidence_string,
146 Point(point_coordinates_.front().x + 15, point_coordinates_.front().y),
147 font,
148 font_scale,
149 Scalar(100, 255, 100),
150 thickness
151 );
152 putText(
153 frame,
155 Point(point_coordinates_.front().x + 15, point_coordinates_.front().y - text_resize_factor_ * 2 * line_spacing),
156 font,
157 font_scale,
158 Scalar(0, 255, 255),
159 thickness
160 );
161 putText(
162 frame,
164 Point(point_coordinates_.front().x + 15, point_coordinates_.front().y - text_resize_factor_ * 3 * line_spacing),
165 font,
166 font_scale,
167 Scalar(0, 255, 255),
168 thickness
169 );
170 putText(
171 frame,
173 Point(point_coordinates_.front().x + 15, point_coordinates_.front().y - text_resize_factor_ * 4 * line_spacing),
174 font,
175 font_scale,
176 Scalar(0, 255, 255),
177 thickness
178 );
179 // uncomment когда появится 3-я координата для амплитуды :)
180 /*putText(
181 frame,
182 "z: " + std::to_string(relative_amplitude_.z),
183 Point(point_coordinates_.front().x, point_coordinates_.front().y - res_mp_ * 4 * line_spacing),
184 FONT_HERSHEY_PLAIN,
185 font_scale,
186 Scalar(0, 255, 255),
187 thickness
188 );*/
189}
Класс для создания объектов-гистограмм, на которые можно выводить различную информацию
Definition: histogram.h:17
void ShowHistogram()
Выводит гистограмму в окно гистограммы
Definition: histogram.cpp:54
void SetYValues(std::vector< float > y_values)
Устанавливает Y-ы
Definition: histogram.cpp:69
void SetXValues(std::vector< double > x_values)
Устанавливает X-ы
Definition: histogram.cpp:64
bool is_histogram_plotted_
Флаг для отрисовки гистограммы
Definition: histogram.h:93
void UpdatePointColor() override
Обновляем текущий цвет точки
float text_resize_factor_
Коэффициент рескейла для отрисовки данных
void DrawHistogram() override
Отрисовывает гистограмму
LonelyPointHandler(Point2f init_coordinates, double sampling_rate, int point_id, float text_resize_factor, std::string output_csv_filename)
Конструктор этого класса
Scalar point_color_
Цвет точки
void DrawPoint(Mat &frame)
Отрисовывает точку на кадре
Point2f GetTextCoordinates()
Возвращает точку, необходимую для отображения координат
void DrawTextData(Mat &frame)
Отрисовывает текстовые данные рядом с точкой
void Draw(Mat &frame) override
Отрисовывает точку и данные, связанные с ней
Rect GetInteractionRect()
Возвращает координаты прямоугольника взаимодействия
void DrawInteractionRectangle(Mat &frame)
Отрисовывает прямоугольник взаимодействия
void DrawPointTrack(Mat &frame)
Отрисовывает линию перемещения (трек) точки
int point_id_
ID точки (нет блин почки)
~LonelyPointHandler()
Деструктор этого класса
Класс для сохранения метаданных (временных и пространственных координат, ID точки)
Definition: output_to_csv.h:18
void Write()
Добавляет данные для записи
bool interacted_
Флаг взаимодействия с точкой
Point3f current_amplitude_
Фактические амплитуды вибрации по x, y. Выражаюытся в пикселях
Rect interaction_box_
Прямоугольник (область) взаимодействия с точкой
std::vector< double > x_
Контейнер для хранения координат гистограммы по оси X (фактически - найденный спектр частот вибрации ...
double sampling_rate_
Частота сэмплирования (фактически - FPS исходного видео)
double confidence_level_
Рейтинг достоверности вибрации
int interaction_offset_
Половина длины прямоугольника взаимодействия
Point3f relative_amplitude_
Относительные амплитуды вибрации по x, y. Выражается отношением амплитуды
double main_frequency_
Главная частота (основная)
std::vector< float > y_
Контейнер для хранения координат гистограммы по оси Y (фактически - найденные магнитуды точки после в...
double sensivity_
Чувствительность определения вибрации
std::vector< double > frequencies_
Контейнер для частот точки
std::vector< Point2f > point_coordinates_
Контейнер для координат точки
std::string ToStringWithPrecision(const T value, const int n=9)
Выполняет округление числа с определенной точностью
Definition: helper.h:49