Updated videostab module
This commit is contained in:
@@ -76,7 +76,9 @@ public:
|
||||
virtual void reset();
|
||||
virtual Mat nextFrame();
|
||||
|
||||
int frameCount() { return static_cast<int>(reader_.get(CV_CAP_PROP_FRAME_COUNT)); }
|
||||
int width() { return static_cast<int>(reader_.get(CV_CAP_PROP_FRAME_WIDTH)); }
|
||||
int height() { return static_cast<int>(reader_.get(CV_CAP_PROP_FRAME_HEIGHT)); }
|
||||
int count() { return static_cast<int>(reader_.get(CV_CAP_PROP_FRAME_COUNT)); }
|
||||
double fps() { return reader_.get(CV_CAP_PROP_FPS); }
|
||||
|
||||
private:
|
||||
|
@@ -54,46 +54,31 @@ namespace videostab
|
||||
class CV_EXPORTS IMotionStabilizer
|
||||
{
|
||||
public:
|
||||
virtual ~IMotionStabilizer() {}
|
||||
virtual void stabilize(const Mat *motions, int size, Mat *stabilizationMotions) const = 0;
|
||||
};
|
||||
|
||||
class CV_EXPORTS MotionFilterBase : public IMotionStabilizer
|
||||
{
|
||||
public:
|
||||
MotionFilterBase() : radius_(0) {}
|
||||
virtual ~MotionFilterBase() {}
|
||||
|
||||
virtual void setRadius(int val) { radius_ = val; }
|
||||
virtual int radius() const { return radius_; }
|
||||
|
||||
virtual void update() {}
|
||||
|
||||
virtual Mat stabilize(int index, const Mat *motions, int size) const = 0;
|
||||
virtual void stabilize(const Mat *motions, int size, Mat *stabilizationMotions) const;
|
||||
|
||||
protected:
|
||||
int radius_;
|
||||
};
|
||||
|
||||
class CV_EXPORTS GaussianMotionFilter : public MotionFilterBase
|
||||
{
|
||||
public:
|
||||
GaussianMotionFilter() : stdev_(-1.f) {}
|
||||
GaussianMotionFilter(int radius, float stdev = -1.f)
|
||||
{
|
||||
setRadius(radius);
|
||||
setStdev(stdev);
|
||||
update();
|
||||
}
|
||||
GaussianMotionFilter(int radius = 15, float stdev = -1.f) { setParams(radius, stdev); }
|
||||
|
||||
void setStdev(float val) { stdev_ = val; }
|
||||
void setParams(int radius, float stdev = -1.f);
|
||||
int radius() const { return radius_; }
|
||||
float stdev() const { return stdev_; }
|
||||
|
||||
virtual void update();
|
||||
|
||||
virtual Mat stabilize(int index, const Mat *motions, int size) const;
|
||||
|
||||
private:
|
||||
int radius_;
|
||||
float stdev_;
|
||||
std::vector<float> weight_;
|
||||
};
|
||||
|
@@ -136,12 +136,10 @@ public:
|
||||
void setMotionFilter(Ptr<MotionFilterBase> val) { motionFilter_ = val; }
|
||||
Ptr<MotionFilterBase> motionFilter() const { return motionFilter_; }
|
||||
|
||||
virtual void reset() { resetImpl(); }
|
||||
virtual void reset();
|
||||
virtual Mat nextFrame() { return nextStabilizedFrame(); }
|
||||
|
||||
private:
|
||||
void resetImpl();
|
||||
|
||||
virtual void setUp(Mat &firstFrame);
|
||||
virtual void estimateMotion();
|
||||
virtual void stabilizeFrame();
|
||||
|
Reference in New Issue
Block a user