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

Класс для создания объектов-гистограмм, на которые можно выводить различную информацию Подробнее...

#include <histogram.h>

Граф наследования:Histogram:
Inheritance graph
[см. легенду]

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

 Histogram (int width, int height, int x_limit, int id, std::vector< double > &x_values, std::vector< float > &y_values)
 Конструктор этого класса Подробнее...
 
 ~Histogram ()
 Деструктор этого класса Подробнее...
 
void DetectEvent (int event, int x, int y, int flags)
 callback функция для определения события (используется для хэндлинга клика мышью) Подробнее...
 
void ShowHistogram ()
 Выводит гистограмму в окно гистограммы Подробнее...
 
void SetXValues (std::vector< double > x_values)
 Устанавливает X-ы Подробнее...
 
void SetYValues (std::vector< float > y_values)
 Устанавливает Y-ы Подробнее...
 
void SetHistogramFlag (bool flag)
 Устанавливает статус флага отрисовки гистограммы Подробнее...
 
void SetHistogramWindowProperty (int prop_id, int prop_value)
 Обновляет статус окна гистограммы (например, для вывода на передний план) Подробнее...
 

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

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

Защищенные данные

bool is_histogram_plotted_
 Флаг для отрисовки гистограммы Подробнее...
 

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

void InitHistogramBackground ()
 Подгатавливаем Histogram::histogram_background_ для дальнейшего использования Подробнее...
 
Mat CalcHistogram ()
 Вычисляет значения для гистограммы Подробнее...
 
bool IsInteracted (int x, int interval)
 Проверяет, соответствует ли точка координате мыши Подробнее...
 
void PlotMouseValue (Mat &frame, int value_idx)
 Выводит значение частоты рядом с курсором Подробнее...
 
std::string to_string_with_precision (const float value, const int n=6)
 Для ограничения кол-ва знаков Подробнее...
 

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

std::string winname_
 Название окна Подробнее...
 
float histogram_offset_
 Оффсет рамки гистограммы Подробнее...
 
int histogram_frame_width_
 Ширина окна гистограммы (включая оффсет) Подробнее...
 
int histogram_frame_height_
 Высота окна гистограммы (включая оффсет) Подробнее...
 
Mat histogram_
 cv::Mat изображение гистограммы Подробнее...
 
Mat histogram_background_
 cv::Mat фон для гистограммы Подробнее...
 
std::vector< double > * x_values_
 Значения гистограммы по оси X. Подробнее...
 
std::vector< float > * y_values_
 Значения гистограммы по оси Y. Подробнее...
 
float axis_signature_offset_
 Отступ для подписей оси Подробнее...
 
float signature_interval_
 Интервал для делений оси и количество этих делений Подробнее...
 
int signature_amount_
 Количество подписей на оси Подробнее...
 
int x_limit_
 Максимальное (предельное) значение по оси X. Подробнее...
 
Point2i last_mouse_coordinates_
 Координаты мыши (курсора) Подробнее...
 
float dead_zone_coeff_
 Процент диапазона, который будет нижней мертвой зоной: 1.0 - 100%. Подробнее...
 

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

Класс для создания объектов-гистограмм, на которые можно выводить различную информацию

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

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

◆ Histogram()

Histogram::Histogram ( int  width,
int  height,
int  x_limit,
int  id,
std::vector< double > &  x_values,
std::vector< float > &  y_values 
)

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

Аргументы
widthширина окна гистограммы (включая оффсет)
heightвысота окна гистограммы (включая оффсет)
x_limitмаксимальное (предельное) значение по оси X
idID точки
x_valuesадрес контейнера со значениями для оси X
y_valuesадрес контейнера со значеними для оси Y

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

3 :
6 x_limit_{ x_limit },
9 dead_zone_coeff_{ 0.0f },
10 x_values_{ &x_values },
11 y_values_{ &y_values }
12{
13 // Инициализация гистограммы пустым кадром черного цвета
14 histogram_offset_ = static_cast<float>(histogram_frame_width_) * 0.05;
15 axis_signature_offset_ = static_cast<float>(histogram_frame_width_) * 0.03;
16 histogram_ = Mat(Size(histogram_frame_width_, histogram_frame_height_), CV_32F, Scalar(0, 0, 0));
17 // Инициализируем название окна
18 winname_ = "histogram " + std::to_string(id);
19 // Посчитаем интервал между подписями оси
20 signature_interval_ = (histogram_.cols - histogram_offset_ * 2.0) / static_cast<float>(signature_amount_ - 1);
21}
std::vector< float > * y_values_
Значения гистограммы по оси Y.
Definition: histogram.h:127
float dead_zone_coeff_
Процент диапазона, который будет нижней мертвой зоной: 1.0 - 100%.
Definition: histogram.h:151
int histogram_frame_width_
Ширина окна гистограммы (включая оффсет)
Definition: histogram.h:107
int histogram_frame_height_
Высота окна гистограммы (включая оффсет)
Definition: histogram.h:111
std::vector< double > * x_values_
Значения гистограммы по оси X.
Definition: histogram.h:123
std::string winname_
Название окна
Definition: histogram.h:99
float histogram_offset_
Оффсет рамки гистограммы
Definition: histogram.h:103
Mat histogram_
cv::Mat изображение гистограммы
Definition: histogram.h:115
float signature_interval_
Интервал для делений оси и количество этих делений
Definition: histogram.h:135
int signature_amount_
Количество подписей на оси
Definition: histogram.h:139
bool is_histogram_plotted_
Флаг для отрисовки гистограммы
Definition: histogram.h:93
int x_limit_
Максимальное (предельное) значение по оси X.
Definition: histogram.h:143
float axis_signature_offset_
Отступ для подписей оси
Definition: histogram.h:131

◆ ~Histogram()

Histogram::~Histogram ( )

Деструктор этого класса

Окно гистограммы разрушается внутри деструктора

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

24{
26 destroyWindow(winname_);
27}

Методы

◆ CalcHistogram()

Mat Histogram::CalcHistogram ( )
private

Вычисляет значения для гистограммы

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

117{
119 float interval = ((histogram_.cols) - histogram_offset_ * 2.0) / y_values_->size();
120
121 Mat frame = histogram_background_.clone();
122
123 // Инициализируем максимальные и минимальные значения магнитуд
124 float max_value = 0.0;
125
126 for (int i = 0; i < y_values_->size(); i++)
127 {
128 if (y_values_->at(i) > max_value)
129 max_value = y_values_->at(i);
130 }
131
132
133 // Отрисовка столбцов
134 for (int i = 0; i < y_values_->size(); i++)
135 {
136 float x_0 = histogram_offset_ + i * interval + interval;
138 float x_1 = x_0;
139 float y_1 = y_0 - y_values_->at(i) / max_value * (histogram_frame_height_ - 2 * histogram_offset_ - axis_signature_offset_);
140
141 // Если мышь указывает на текущее значение, отрисовываем это значение рядом с курсором
142 if (IsInteracted(static_cast<int>(x_0), interval))
143 {
144 PlotMouseValue(frame, i);
145 }
146 line(frame, Point2f(x_0, y_0), Point2f(x_1, y_1), Scalar(255, 255, 255), 1, LINE_AA);
147 }
148
149 return frame;
150}
Mat histogram_background_
cv::Mat фон для гистограммы
Definition: histogram.h:119
bool IsInteracted(int x, int interval)
Проверяет, соответствует ли точка координате мыши
Definition: histogram.cpp:152
void PlotMouseValue(Mat &frame, int value_idx)
Выводит значение частоты рядом с курсором
Definition: histogram.cpp:162
void InitHistogramBackground()
Подгатавливаем Histogram::histogram_background_ для дальнейшего использования
Definition: histogram.cpp:85

◆ DetectEvent()

void Histogram::DetectEvent ( int  event,
int  x,
int  y,
int  flags 
)

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

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

36{
37 switch (event) {
38 // ЛКМ была прожата вниз
39 case EVENT_LBUTTONDOWN:
40 {
42 destroyWindow(winname_);
43 break;
44 }
45 case EVENT_MOUSEMOVE:
46 {
49 break;
50 }
51 }
52}
Point2i last_mouse_coordinates_
Координаты мыши (курсора)
Definition: histogram.h:147

◆ InitHistogramBackground()

void Histogram::InitHistogramBackground ( )
private

Подгатавливаем Histogram::histogram_background_ для дальнейшего использования

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

86{
87 Mat frame = Mat(Size(histogram_frame_width_, histogram_frame_height_), CV_32F, Scalar(0, 0, 0));
88
89 // Отрисовываем рамку гистограммы
90 rectangle(frame, Rect(
91 Point2f(histogram_offset_ * 0.5, histogram_offset_ * 0.5), // top-left
93 Scalar(255, 255, 255),
94 1
95 );
96
97 // Отрисовываем подписи
98 for (int i = 0; i < signature_amount_; i++)
99 {
100 float signature_start = static_cast<float>(x_values_->front());
101 float signature_interval = static_cast<float>(x_limit_ - signature_start) / static_cast<float>(signature_amount_ - 1);
102 float value = signature_start + signature_interval * i;
103 putText(
104 frame,
105 to_string_with_precision(value, 1),
107 FONT_HERSHEY_PLAIN,
108 1,
109 Scalar(255, 255, 255)
110 );
111 }
112
113 frame.copyTo(histogram_background_);
114}
std::string to_string_with_precision(const float value, const int n=6)
Для ограничения кол-ва знаков
Definition: histogram.cpp:174

◆ IsInteracted()

bool Histogram::IsInteracted ( int  x,
int  interval 
)
private

Проверяет, соответствует ли точка координате мыши

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

153{
154 if (interval > 1)
155 {
156 Rect interaction_box = Rect(Point2f(x - interval * 0.9, -1), Point2f(x + interval * 0.9, 1));
157 return ((interaction_box.contains(Point2i(last_mouse_coordinates_.x, 0))) ? true : false);
158 }
159 return ((last_mouse_coordinates_.x == x) ? true : false);
160}

◆ OnMouse()

void Histogram::OnMouse ( int  event,
int  x,
int  y,
int  flags,
void *  userdata 
)
static

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

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

30{
31 Histogram* d = static_cast<Histogram*>(userdata);
32 d->DetectEvent(event, x, y, flags);
33}
Класс для создания объектов-гистограмм, на которые можно выводить различную информацию
Definition: histogram.h:17
void DetectEvent(int event, int x, int y, int flags)
callback функция для определения события (используется для хэндлинга клика мышью)
Definition: histogram.cpp:35

◆ PlotMouseValue()

void Histogram::PlotMouseValue ( Mat &  frame,
int  value_idx 
)
private

Выводит значение частоты рядом с курсором

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

163{
164 putText(
165 frame,
166 to_string_with_precision(x_values_->at(value_idx), 1),
168 FONT_HERSHEY_PLAIN,
169 1,
170 Scalar(255, 255, 255)
171 );
172}

◆ SetHistogramFlag()

void Histogram::SetHistogramFlag ( bool  flag)

Устанавливает статус флага отрисовки гистограммы

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

75{
76 // Устанавливаем флаг
78}

◆ SetHistogramWindowProperty()

void Histogram::SetHistogramWindowProperty ( int  prop_id,
int  prop_value 
)

Обновляет статус окна гистограммы (например, для вывода на передний план)

На данный момент функция не используется :/

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

81{
82 setWindowProperty(winname_, prop_id, prop_value);
83}

◆ SetXValues()

void Histogram::SetXValues ( std::vector< double >  x_values)

Устанавливает X-ы

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

65{
66 //x_values_ = x_values;
67}

◆ SetYValues()

void Histogram::SetYValues ( std::vector< float >  y_values)

Устанавливает Y-ы

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

70{
71 //y_values_ = y_values;
72}

◆ ShowHistogram()

void Histogram::ShowHistogram ( )

Выводит гистограмму в окно гистограммы

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

55{
57 {
59 imshow(winname_, histogram_);
60 setMouseCallback(winname_, OnMouse, (void*)this);
61 }
62}
static void OnMouse(int event, int x, int y, int flags, void *userdata)
callback функция для определения события (используется для хэндлинга клика мышью)
Definition: histogram.cpp:29
Mat CalcHistogram()
Вычисляет значения для гистограммы
Definition: histogram.cpp:116

◆ to_string_with_precision()

std::string Histogram::to_string_with_precision ( const float  value,
const int  n = 6 
)
private

Для ограничения кол-ва знаков

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

175{
176 std::ostringstream out;
177 out.precision(n);
178 out << std::fixed << value;
179 return out.str();
180}

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

◆ axis_signature_offset_

float Histogram::axis_signature_offset_
private

Отступ для подписей оси

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

◆ dead_zone_coeff_

float Histogram::dead_zone_coeff_
private

Процент диапазона, который будет нижней мертвой зоной: 1.0 - 100%.

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

◆ histogram_

Mat Histogram::histogram_
private

cv::Mat изображение гистограммы

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

◆ histogram_background_

Mat Histogram::histogram_background_
private

cv::Mat фон для гистограммы

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

◆ histogram_frame_height_

int Histogram::histogram_frame_height_
private

Высота окна гистограммы (включая оффсет)

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

◆ histogram_frame_width_

int Histogram::histogram_frame_width_
private

Ширина окна гистограммы (включая оффсет)

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

◆ histogram_offset_

float Histogram::histogram_offset_
private

Оффсет рамки гистограммы

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

◆ is_histogram_plotted_

bool Histogram::is_histogram_plotted_
protected

Флаг для отрисовки гистограммы

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

◆ last_mouse_coordinates_

Point2i Histogram::last_mouse_coordinates_
private

Координаты мыши (курсора)

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

◆ signature_amount_

int Histogram::signature_amount_
private

Количество подписей на оси

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

◆ signature_interval_

float Histogram::signature_interval_
private

Интервал для делений оси и количество этих делений

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

◆ winname_

std::string Histogram::winname_
private

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

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

◆ x_limit_

int Histogram::x_limit_
private

Максимальное (предельное) значение по оси X.

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

◆ x_values_

std::vector<double>* Histogram::x_values_
private

Значения гистограммы по оси X.

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

◆ y_values_

std::vector<float>* Histogram::y_values_
private

Значения гистограммы по оси Y.

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


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