You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wheeldetect/molunCar/MultiScaleObj.h

88 lines
1.6 KiB
C

/*! \file MultiScaleObj.h
Copyright (C) 2014 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD>˾.
Created by bang.jin at 2017/02/20.
*/
#ifndef __MultiScaleObj_h_
#define __MultiScaleObj_h_
#include <vector>
#include <opencv2/opencv.hpp>
#include <opencv2/opencv_modules.hpp>
using std::vector;
using namespace cv;
class MultiScaleObj;
class MultiScaleImageProc
{
public:
virtual void operator()(const Mat& img, MultiScaleObj* pMSObj, void* pData) = 0;
};
class MultiScaleObj
{
public:
MultiScaleObj(int level = 2, float scaleStep = 0.5);
~MultiScaleObj();
int getLevelNum() const { return mLevelNum; }
void setLevelNum(int val) { mLevelNum = val; }
int getLevel() const { return mLevel; }
float getScaleStep() const { return mScaleStep; }
void setScaleStep(float iVal) { mScaleStep = iVal; }
int getMaxLevel() const { return getLevelNum() - 1; }
int resetMaxLevel()
{
setLevel(getMaxLevel());
return getLevel();
}
int downLevel()
{
mLevel--;
return mLevel;
}
virtual void proc(void *pData) = 0;
protected:
void setLevel(int val) { mLevel = val; }
int mLevelNum;
int mLevel;
float mScaleStep;
private:
};
class MultiScaleImage : public MultiScaleObj
{
public:
MultiScaleImage();
~MultiScaleImage();
void setBaseLevel(const Mat& img);
void genMultiScale();
virtual void proc(void *pData);
MultiScaleImageProc* getProc() const { return mpProc; }
void setProc(MultiScaleImageProc* iVal) { mpProc = iVal; }
Mat getImg(int level);
protected:
vector<Mat> mMultiScaleImages;
MultiScaleImageProc* mpProc;
private:
};
#endif // __MultiScaleObj_h_