1d2d28ad8be988158b95969fe1e435b9764388c34zongwave/* 2d2d28ad8be988158b95969fe1e435b9764388c34zongwave * stablizer.h - abstract header for DVS (Digital Video Stabilizer) 3d2d28ad8be988158b95969fe1e435b9764388c34zongwave * 4d2d28ad8be988158b95969fe1e435b9764388c34zongwave * Copyright (c) 2014-2016 Intel Corporation 5d2d28ad8be988158b95969fe1e435b9764388c34zongwave * 6d2d28ad8be988158b95969fe1e435b9764388c34zongwave * Licensed under the Apache License, Version 2.0 (the "License"); 7d2d28ad8be988158b95969fe1e435b9764388c34zongwave * you may not use this file except in compliance with the License. 8d2d28ad8be988158b95969fe1e435b9764388c34zongwave * You may obtain a copy of the License at 9d2d28ad8be988158b95969fe1e435b9764388c34zongwave * 10d2d28ad8be988158b95969fe1e435b9764388c34zongwave * http://www.apache.org/licenses/LICENSE-2.0 11d2d28ad8be988158b95969fe1e435b9764388c34zongwave * 12d2d28ad8be988158b95969fe1e435b9764388c34zongwave * Unless required by applicable law or agreed to in writing, software 13d2d28ad8be988158b95969fe1e435b9764388c34zongwave * distributed under the License is distributed on an "AS IS" BASIS, 14d2d28ad8be988158b95969fe1e435b9764388c34zongwave * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15d2d28ad8be988158b95969fe1e435b9764388c34zongwave * See the License for the specific language governing permissions and 16d2d28ad8be988158b95969fe1e435b9764388c34zongwave * limitations under the License. 17d2d28ad8be988158b95969fe1e435b9764388c34zongwave * 18d2d28ad8be988158b95969fe1e435b9764388c34zongwave * Author: Zong Wei <wei.zong@intel.com> 19d2d28ad8be988158b95969fe1e435b9764388c34zongwave */ 20d2d28ad8be988158b95969fe1e435b9764388c34zongwave 21d2d28ad8be988158b95969fe1e435b9764388c34zongwave#ifndef _STABILIZER_H_ 22d2d28ad8be988158b95969fe1e435b9764388c34zongwave#define _STABILIZER_H_ 23d2d28ad8be988158b95969fe1e435b9764388c34zongwave 24d2d28ad8be988158b95969fe1e435b9764388c34zongwave#include <vector> 25d2d28ad8be988158b95969fe1e435b9764388c34zongwave#include <opencv2/core.hpp> 26d2d28ad8be988158b95969fe1e435b9764388c34zongwave#include <opencv2/opencv.hpp> 279e4b6e70aa46038169cb624c56ab77344aa13786U. Artie Eoff#include <opencv2/videostab.hpp> 28d2d28ad8be988158b95969fe1e435b9764388c34zongwave 29d2d28ad8be988158b95969fe1e435b9764388c34zongwave#include "libdvs.h" 30d2d28ad8be988158b95969fe1e435b9764388c34zongwave 312d97fabc6bb36032ea64c5a91860664193b91c43zongwaveclass OnePassVideoStabilizer : public cv::videostab::OnePassStabilizer 32d2d28ad8be988158b95969fe1e435b9764388c34zongwave{ 33d2d28ad8be988158b95969fe1e435b9764388c34zongwavepublic: 34d2d28ad8be988158b95969fe1e435b9764388c34zongwave virtual ~OnePassVideoStabilizer() {}; 35d2d28ad8be988158b95969fe1e435b9764388c34zongwave 362d97fabc6bb36032ea64c5a91860664193b91c43zongwave virtual cv::Mat nextStabilizedMotion(DvsData* frame, int& stablizedPos); 37d2d28ad8be988158b95969fe1e435b9764388c34zongwave 38d2d28ad8be988158b95969fe1e435b9764388c34zongwaveprotected: 392d97fabc6bb36032ea64c5a91860664193b91c43zongwave virtual cv::Mat estimateMotion(); 402d97fabc6bb36032ea64c5a91860664193b91c43zongwave virtual void setUpFrame(const cv::Mat &firstFrame); 41d2d28ad8be988158b95969fe1e435b9764388c34zongwave 42d2d28ad8be988158b95969fe1e435b9764388c34zongwaveprivate: 43d2d28ad8be988158b95969fe1e435b9764388c34zongwave 44d2d28ad8be988158b95969fe1e435b9764388c34zongwave}; 45d2d28ad8be988158b95969fe1e435b9764388c34zongwave 462d97fabc6bb36032ea64c5a91860664193b91c43zongwaveclass TwoPassVideoStabilizer : public cv::videostab::TwoPassStabilizer 47d2d28ad8be988158b95969fe1e435b9764388c34zongwave{ 48d2d28ad8be988158b95969fe1e435b9764388c34zongwavepublic: 49d2d28ad8be988158b95969fe1e435b9764388c34zongwave virtual ~TwoPassVideoStabilizer() {}; 50d2d28ad8be988158b95969fe1e435b9764388c34zongwave 512d97fabc6bb36032ea64c5a91860664193b91c43zongwave virtual cv::Mat nextStabilizedMotion(DvsData* frame, int& stablizedPos); 52d2d28ad8be988158b95969fe1e435b9764388c34zongwave 53d2d28ad8be988158b95969fe1e435b9764388c34zongwaveprotected: 542d97fabc6bb36032ea64c5a91860664193b91c43zongwave virtual cv::Mat estimateMotion(); 552d97fabc6bb36032ea64c5a91860664193b91c43zongwave virtual void setUpFrame(const cv::Mat &firstFrame); 56d2d28ad8be988158b95969fe1e435b9764388c34zongwave 57d2d28ad8be988158b95969fe1e435b9764388c34zongwaveprivate: 58d2d28ad8be988158b95969fe1e435b9764388c34zongwave 59d2d28ad8be988158b95969fe1e435b9764388c34zongwave}; 60d2d28ad8be988158b95969fe1e435b9764388c34zongwave 61d2d28ad8be988158b95969fe1e435b9764388c34zongwaveclass VideoStabilizer 62d2d28ad8be988158b95969fe1e435b9764388c34zongwave{ 63d2d28ad8be988158b95969fe1e435b9764388c34zongwavepublic: 64d2d28ad8be988158b95969fe1e435b9764388c34zongwave VideoStabilizer(bool isTwoPass = false, 65d2d28ad8be988158b95969fe1e435b9764388c34zongwave bool wobbleSuppress = false, 66d2d28ad8be988158b95969fe1e435b9764388c34zongwave bool deblur = false, 67d2d28ad8be988158b95969fe1e435b9764388c34zongwave bool inpainter = false); 68d2d28ad8be988158b95969fe1e435b9764388c34zongwave virtual ~VideoStabilizer(); 69d2d28ad8be988158b95969fe1e435b9764388c34zongwave 702d97fabc6bb36032ea64c5a91860664193b91c43zongwave cv::Ptr<cv::videostab::StabilizerBase> stabilizer() const { 71d2d28ad8be988158b95969fe1e435b9764388c34zongwave return stabilizer_; 72d2d28ad8be988158b95969fe1e435b9764388c34zongwave } 73d2d28ad8be988158b95969fe1e435b9764388c34zongwave 742d97fabc6bb36032ea64c5a91860664193b91c43zongwave cv::Mat nextFrame(); 752d97fabc6bb36032ea64c5a91860664193b91c43zongwave cv::Mat nextStabilizedMotion(DvsData* frame, int& stablizedPos); 76d2d28ad8be988158b95969fe1e435b9764388c34zongwave 772d97fabc6bb36032ea64c5a91860664193b91c43zongwave cv::Size trimedVideoSize(cv::Size frameSize); 782d97fabc6bb36032ea64c5a91860664193b91c43zongwave cv::Mat cropVideoFrame(cv::Mat& frame); 79d2d28ad8be988158b95969fe1e435b9764388c34zongwave 802d97fabc6bb36032ea64c5a91860664193b91c43zongwave void setFrameSize(cv::Size frameSize); 812d97fabc6bb36032ea64c5a91860664193b91c43zongwave cv::Size getFrameSize() const { 82d2d28ad8be988158b95969fe1e435b9764388c34zongwave return frameSize_; 83d2d28ad8be988158b95969fe1e435b9764388c34zongwave } 84d2d28ad8be988158b95969fe1e435b9764388c34zongwave 85d2d28ad8be988158b95969fe1e435b9764388c34zongwave void configFeatureDetector(int features, double minDistance); 86d2d28ad8be988158b95969fe1e435b9764388c34zongwave void configMotionFilter(int radius, float stdev); 87d2d28ad8be988158b95969fe1e435b9764388c34zongwave void configDeblurrer(int radius, double sensitivity); 88d2d28ad8be988158b95969fe1e435b9764388c34zongwave 89d2d28ad8be988158b95969fe1e435b9764388c34zongwavepublic: 902d97fabc6bb36032ea64c5a91860664193b91c43zongwave cv::VideoWriter writer_; 91d2d28ad8be988158b95969fe1e435b9764388c34zongwave 92d2d28ad8be988158b95969fe1e435b9764388c34zongwaveprivate: 93d2d28ad8be988158b95969fe1e435b9764388c34zongwave bool isTwoPass_; 94d2d28ad8be988158b95969fe1e435b9764388c34zongwave float trimRatio_; 952d97fabc6bb36032ea64c5a91860664193b91c43zongwave cv::Size frameSize_; 962d97fabc6bb36032ea64c5a91860664193b91c43zongwave cv::Ptr<cv::videostab::StabilizerBase> stabilizer_; 97d2d28ad8be988158b95969fe1e435b9764388c34zongwave}; 98d2d28ad8be988158b95969fe1e435b9764388c34zongwave 99d2d28ad8be988158b95969fe1e435b9764388c34zongwave 100d2d28ad8be988158b95969fe1e435b9764388c34zongwave#endif 101