/*
* stablizer.h - abstract header for DVS (Digital Video Stabilizer)
*
* Copyright (c) 2014-2016 Intel Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Author: Zong Wei <wei.zong@intel.com>
*/
#ifndef _STABILIZER_H_
#define _STABILIZER_H_
#include <vector>
#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/videostab.hpp>
#include "libdvs.h"
class OnePassVideoStabilizer : public cv::videostab::OnePassStabilizer
{
public:
virtual ~OnePassVideoStabilizer() {};
virtual cv::Mat nextStabilizedMotion(DvsData* frame, int& stablizedPos);
protected:
virtual cv::Mat estimateMotion();
virtual void setUpFrame(const cv::Mat &firstFrame);
private:
};
class TwoPassVideoStabilizer : public cv::videostab::TwoPassStabilizer
{
public:
virtual ~TwoPassVideoStabilizer() {};
virtual cv::Mat nextStabilizedMotion(DvsData* frame, int& stablizedPos);
protected:
virtual cv::Mat estimateMotion();
virtual void setUpFrame(const cv::Mat &firstFrame);
private:
};
class VideoStabilizer
{
public:
VideoStabilizer(bool isTwoPass = false,
bool wobbleSuppress = false,
bool deblur = false,
bool inpainter = false);
virtual ~VideoStabilizer();
cv::Ptr<cv::videostab::StabilizerBase> stabilizer() const {
return stabilizer_;
}
cv::Mat nextFrame();
cv::Mat nextStabilizedMotion(DvsData* frame, int& stablizedPos);
cv::Size trimedVideoSize(cv::Size frameSize);
cv::Mat cropVideoFrame(cv::Mat& frame);
void setFrameSize(cv::Size frameSize);
cv::Size getFrameSize() const {
return frameSize_;
}
void configFeatureDetector(int features, double minDistance);
void configMotionFilter(int radius, float stdev);
void configDeblurrer(int radius, double sensitivity);
public:
cv::VideoWriter writer_;
private:
bool isTwoPass_;
float trimRatio_;
cv::Size frameSize_;
cv::Ptr<cv::videostab::StabilizerBase> stabilizer_;
};
#endif