1#include "MovEn/movement_enlargement.h"
4 input_file_name_{ input_file_name },
5 output_file_name_{ output_file_name },
6 win_name_{
"Movement Enlarger" }
9 std::cout <<
"Movement Enlarger constructor" << std::endl;
12MovementEnlarger::~MovementEnlarger()
14 std::cout <<
"Movement Enlarger destructor" << std::endl;
20 int current_num_of_frame = 0;
23 std::vector<Mat> input_pyramid;
24 std::vector<Mat> motion_pyramid;
25 while (current_num_of_frame < amount_of_frames)
40 if (current_num_of_frame == 1)
42 low_pass_high_pyramid_ = input_pyramid;
43 low_pass_low_pyramid_ = input_pyramid;
44 motion_pyramid = input_pyramid;
48 for (
int current_level = 0; current_level <
levels_amount_; ++current_level)
50 IirFilter(input_pyramid[current_level], motion_pyramid[current_level], low_pass_high_pyramid_[current_level], low_pass_low_pyramid_[current_level], cutoff_low_, cutoff_high_);
56 delta_ = lambda_cutoff_ / (8.0 * (1.0 + alpha_));
60 lambda_ = sqrt((width * width + height * height)) / 3.0;
63 for (
int current_level =
levels_amount_; current_level >= 0; --current_level)
67 std::cout <<
"current lambda_ is " <<
lambda_ <<
" on level " << current_level << std::endl;
78 if (current_num_of_frame > 1)
88 std::cout <<
"frame " << current_num_of_frame <<
" is processed. The are also " << amount_of_frames - current_num_of_frame <<
" frames left. " << std::endl;
93 int code = waitKey(20);
104 current_num_of_frame = amount_of_frames;
double lambda_
Показательная длина волны
void IirFilter(Mat &input_pyramid_level, Mat &motion_pyramid_level, Mat &low_pass_high_level, Mat &low_pass_low_level, double cutoff_low, double cutoff_high)
Фильтр для отсекания низких и высоких "пространственных" частот ("фильтр с бесконечной импульсной хар...
void BuildFromLaplacePyramid(std::vector< Mat > &motion_pyramid, Mat &motion_frame, int levels)
Извлекаем выходное изображение из пирамиды Лапласа
int levels_amount_
Количество уровней (слоев) пирамиды
void LaplaceEnlarge(Mat &motion_pyramid_level, int current_level)
Осуществляет увеличение движения на конкретном уровне пирамиды
double delta_
Коэффициент, использующийся при увеличении
void BuildLaplacePyramid(const Mat &input_frame, std::vector< Mat > &input_pyramid, const int levels)
Создает пирамиду изображений
Класс для чтения и сохранения кадров видео, а также различной их обработки
int GetAmountOfFrames()
Возвращает общее количество кадров
int GetFrameWidth()
Возвращает ширину исходного видео
bool GetInputCapStatus()
Возвращает текущий статус input_cap.
void ShowFrame(Mat frame, bool fullscreen)
Выводит в главное окно принимаемое изображение
Mat GetCurrentFrame()
Возвращает последний прочитанный на данный момент кадр
void ReadNextFrame()
Считывает следующий кадр видео
void WriteFrame(Mat frame)
Записывает кадр с помощью output_cap.
int GetCurrentPosOfFrame()
Возвращает текущее положение кадра относительно первого
int GetFrameHeight()
Возвращает высоту считываемого видео
void ExecuteLaplaceEnlargement()
Выполняет визуальное увеличение движения
std::string win_name_
Имя окна, в которое будет выводиться обработанный кадр
std::string input_file_name_
имя (путь) входного файла (видео)
Mat frame_with_motion_info_
Mat-сущность, содержащая информацию об увеличенном движении
Mat frame_to_be_enlarged_
Изображение (кадр), движение на котором будет увеличено
std::string output_file_name_
имя (путь) выходного файла (видео)
Mat frame_enlarged_
Изображение (кадр), движение на котором было увеличено
MovementEnlarger(std::string input_file_name, std::string output_file_name)
Конструктор этого класса