1#include "VVT-V2/histogram.h"
3Histogram::Histogram(
int width,
int height,
int x_limit,
int id, std::vector<double>& x_values, std::vector<float>& y_values) :
4 histogram_frame_width_{ width },
5 histogram_frame_height_{ height },
7 is_histogram_plotted_{ false },
8 signature_amount_{ 8 },
9 dead_zone_coeff_{ 0.0f },
10 x_values_{ &x_values },
11 y_values_{ &y_values }
18 winname_ =
"histogram " + std::to_string(
id);
39 case EVENT_LBUTTONDOWN:
82 setWindowProperty(
winname_, prop_id, prop_value);
90 rectangle(frame, Rect(
93 Scalar(255, 255, 255),
100 float signature_start =
static_cast<float>(
x_values_->front());
102 float value = signature_start + signature_interval * i;
109 Scalar(255, 255, 255)
124 float max_value = 0.0;
126 for (
int i = 0; i <
y_values_->size(); i++)
134 for (
int i = 0; i <
y_values_->size(); i++)
146 line(frame, Point2f(x_0, y_0), Point2f(x_1, y_1), Scalar(255, 255, 255), 1, LINE_AA);
156 Rect interaction_box = Rect(Point2f(x - interval * 0.9, -1), Point2f(x + interval * 0.9, 1));
170 Scalar(255, 255, 255)
176 std::ostringstream out;
178 out << std::fixed << value;
Класс для создания объектов-гистограмм, на которые можно выводить различную информацию
std::vector< float > * y_values_
Значения гистограммы по оси Y.
Mat histogram_background_
cv::Mat фон для гистограммы
static void OnMouse(int event, int x, int y, int flags, void *userdata)
callback функция для определения события (используется для хэндлинга клика мышью)
int histogram_frame_width_
Ширина окна гистограммы (включая оффсет)
int histogram_frame_height_
Высота окна гистограммы (включая оффсет)
std::vector< double > * x_values_
Значения гистограммы по оси X.
Point2i last_mouse_coordinates_
Координаты мыши (курсора)
bool IsInteracted(int x, int interval)
Проверяет, соответствует ли точка координате мыши
std::string winname_
Название окна
Histogram(int width, int height, int x_limit, int id, std::vector< double > &x_values, std::vector< float > &y_values)
Конструктор этого класса
void PlotMouseValue(Mat &frame, int value_idx)
Выводит значение частоты рядом с курсором
float histogram_offset_
Оффсет рамки гистограммы
void ShowHistogram()
Выводит гистограмму в окно гистограммы
Mat histogram_
cv::Mat изображение гистограммы
void SetHistogramWindowProperty(int prop_id, int prop_value)
Обновляет статус окна гистограммы (например, для вывода на передний план)
Mat CalcHistogram()
Вычисляет значения для гистограммы
std::string to_string_with_precision(const float value, const int n=6)
Для ограничения кол-ва знаков
void SetYValues(std::vector< float > y_values)
Устанавливает Y-ы
float signature_interval_
Интервал для делений оси и количество этих делений
void SetXValues(std::vector< double > x_values)
Устанавливает X-ы
void DetectEvent(int event, int x, int y, int flags)
callback функция для определения события (используется для хэндлинга клика мышью)
void SetHistogramFlag(bool flag)
Устанавливает статус флага отрисовки гистограммы
~Histogram()
Деструктор этого класса
int signature_amount_
Количество подписей на оси
bool is_histogram_plotted_
Флаг для отрисовки гистограммы
int x_limit_
Максимальное (предельное) значение по оси X.
float axis_signature_offset_
Отступ для подписей оси
void InitHistogramBackground()
Подгатавливаем Histogram::histogram_background_ для дальнейшего использования