살군의 보조기억 장치

Another memory device…

ts.hpp 정리

with one comment

opencv 의 unit test 를 진입점으로 잡기로 했으니, unit test 와 관련된 시작코드를 보고있다. 제일 먼저 봐야될 부분이 ts.hppts.cpp 인거 같다. accuracy 테스트의 경우에는 모두 CV_TEST_MAIN() 으로 시작하는것으로 보인다. 자 그럼 ts.hpp 를 먼저 보자.

// include & define
// ...

namespace cvtest
{
    using std::vector;              // vector 를 바로 사용하기 위해 using 키워드 사용
    // ...
    class CV_EXPORTS TS;                         // TS 선언

    inline unsigned randInt( RNG& rng ) { /* ... */ }
    inline double   randReal( RNG& rng ) { /* ... */ }
    inline int      clipInt( int val, int min_val, int max_val ) { /* ... */ }

    CV_EXPORTS int64    readSeed(const char* str);
    CV_EXPORTS void     randUni( RNG& rng, Mat& a, const Scalar& param1, const Scalar& param2 );
    CV_EXPORTS const char* getTypeName( int type );
    CV_EXPORTS int      typeByName( const char* type_name );
    CV_EXPORTS string   vec2str(const string& sep, const int* v, size_t nelems);
    CV_EXPORTS double   getMinVal(int depth);
    CV_EXPORTS double   getMaxVal(int depth);
    CV_EXPORTS Size     randomSize(RNG& rng, double maxSizeLog);
    CV_EXPORTS void     randomSize(RNG& rng, int minDims, int maxDims, double maxSizeLog, vector& sz);
    CV_EXPORTS int      randomType(RNG& rng, int typeMask, int minChannels, int maxChannels);
    CV_EXPORTS Mat      randomMat(RNG& rng, Size size, int type, double minVal, double maxVal, bool useRoi);
    CV_EXPORTS Mat      randomMat(RNG& rng, const vector& size, int type, double minVal, double maxVal, bool useRoi);
    CV_EXPORTS void     add(const Mat& a, double alpha, const Mat& b, double beta, Scalar gamma, Mat& c, int ctype, bool calcAbs=false);
    CV_EXPORTS void     multiply(const Mat& a, const Mat& b, Mat& c, double alpha=1);
    CV_EXPORTS void     divide(const Mat& a, const Mat& b, Mat& c, double alpha=1);
    CV_EXPORTS void     convert(const Mat& src, Mat& dst, int dtype, double alpha=1, double beta=0);
    CV_EXPORTS void     copy(const Mat& src, Mat& dst, const Mat& mask=Mat(), bool invertMask=false);
    CV_EXPORTS void     set(Mat& dst, const Scalar& gamma, const Mat& mask=Mat());
    CV_EXPORTS void     extract( const Mat& a, Mat& plane, int coi );    // working with multi-channel arrays
    CV_EXPORTS void     insert( const Mat& plane, Mat& a, int coi );
    CV_EXPORTS int      check( const Mat& data, double min_val, double max_val, vector* idx );    // checks that the array does not have NaNs and/or Infs and all the elements are within [min_val,max_val). idx is the index of the first "bad" element.
    CV_EXPORTS void     patchZeros( Mat& mat, double level );    // modifies values that are close to zero
    CV_EXPORTS void     transpose(const Mat& src, Mat& dst);
    CV_EXPORTS void     erode(const Mat& src, Mat& dst, const Mat& _kernel, Point anchor=Point(-1,-1), int borderType=IPL_BORDER_CONSTANT, const Scalar& borderValue=Scalar());
    CV_EXPORTS void     dilate(const Mat& src, Mat& dst, const Mat& _kernel, Point anchor=Point(-1,-1), int borderType=IPL_BORDER_CONSTANT, const Scalar& borderValue=Scalar());
    CV_EXPORTS void     filter2D(const Mat& src, Mat& dst, int ddepth, const Mat& kernel, Point anchor, double delta, int borderType, const Scalar& borderValue=Scalar());
    CV_EXPORTS void     copyMakeBorder(const Mat& src, Mat& dst, int top, int bottom, int left, int right, int borderType, const Scalar& borderValue=Scalar());
    CV_EXPORTS Mat     calcSobelKernel2D( int dx, int dy, int apertureSize, int origin=0 );
    CV_EXPORTS Mat     calcLaplaceKernel2D( int aperture_size );
    CV_EXPORTS void    initUndistortMap( const Mat& a, const Mat& k, Size sz, Mat& mapx, Mat& mapy );
    CV_EXPORTS void    minMaxLoc(const Mat& src, double* minval, double* maxval, vector* minloc, vector* maxloc, const Mat& mask=Mat());
    CV_EXPORTS double  norm(const Mat& src, int normType, const Mat& mask=Mat());
    CV_EXPORTS double  norm(const Mat& src1, const Mat& src2, int normType, const Mat& mask=Mat());
    CV_EXPORTS Scalar  mean(const Mat& src, const Mat& mask=Mat());
    CV_EXPORTS bool    cmpUlps(const Mat& data, const Mat& refdata, int expMaxDiff, double* realMaxDiff, vector* idx);
    CV_EXPORTS int     cmpEps(const Mat& data, const Mat& refdata, double* max_diff, double success_err_level, vector* idx, bool element_wise_relative_error);    // compares two arrays. max_diff is the maximum actual difference, success_err_level is maximum allowed difference, idx is the index of the first element for which difference is >success_err_level (or index of element with the maximum difference)
    CV_EXPORTS int     cmpEps2(TS* ts, const Mat& data, const Mat& refdata, double success_err_level, bool element_wise_relative_error, const char* desc);    // a wrapper for the previous function. in case of error prints the message to log file.
    CV_EXPORTS int     cmpEps2_64f(TS* ts, const double* val, const double* refval, int len, double eps, const char* param_name);
    CV_EXPORTS void    logicOp(const Mat& src1, const Mat& src2, Mat& dst, char c);
    CV_EXPORTS void    logicOp(const Mat& src, const Scalar& s, Mat& dst, char c);
    CV_EXPORTS void    min(const Mat& src1, const Mat& src2, Mat& dst);
    CV_EXPORTS void    min(const Mat& src, double s, Mat& dst);
    CV_EXPORTS void    max(const Mat& src1, const Mat& src2, Mat& dst);
    CV_EXPORTS void    max(const Mat& src, double s, Mat& dst);
    CV_EXPORTS void    compare(const Mat& src1, const Mat& src2, Mat& dst, int cmpop);
    CV_EXPORTS void    compare(const Mat& src, double s, Mat& dst, int cmpop);
    CV_EXPORTS void    gemm(const Mat& src1, const Mat& src2, double alpha, const Mat& src3, double beta, Mat& dst, int flags);
    CV_EXPORTS void    transform( const Mat& src, Mat& dst, const Mat& transmat, const Mat& shift );
    CV_EXPORTS double  crossCorr(const Mat& src1, const Mat& src2);

    CV_EXPORTS std::ostream& operator << (std::ostream& out, const MatInfo& m);

    struct CV_EXPORTS MatInfo { /* ... */ }
    struct CV_EXPORTS MatComparator { /* ... */ }
    struct TestInfo { /* ... */ }
    struct CV_EXPORTS TSParams { /* ... */ }
    struct CV_EXPORTS DefaultRngAuto { /* ... */ }

    class BaseTest;                               // BaseTest 선언
    class TS;                                     // TS 재선언(?)
    class CV_EXPORTS BaseTest { /* ... */ }       // BaseTest 정의
    class CV_EXPORTS TS { /* ... */ }             // TS 정의
    class CV_EXPORTS ArrayTest { /* ... */ }      // ArrayTest 정의
    class CV_EXPORTS BadArgTest { /* ... */ }     // BadArgTest 정의
}

CV_EXPORTS void cvTsZero( CvMat* c, const CvMat* mask=0 );    // fills c with zeros
CV_EXPORTS void cvTsCopy( const CvMat* a, CvMat* b, const CvMat* mask=0 );    // copies a to b (whole matrix or only the selected region)
CV_EXPORTS void cvTsConvert( const CvMat* src, CvMat* dst );    // converts one array to another
CV_EXPORTS void cvTsGEMM( const CvMat* a, const CvMat* b, double alpha, const CvMat* c, double beta, CvMat* d, int flags );

// ...

#define CV_TEST_MAIN(resourcesubdir, ...) \
// ...
#define CV_TEST_FAIL_NO_IMPL() do { \
// ...

보기 좋도록 내 맘대로 순서를 좀 조정했다. 크게 cvtest 네임스페이스 안에 있는 것과 밖에 있는 것으로 나눌 수 있는데 네임스페이스 안에는,

    1. 함수 선언 (CV_EXPORTS, inline)
    2. << 연산자 오버로딩
    3. 그렇다. 이거는 산술연산자arithmetic operator가 아니라 std::ostream << 연산자이다. 자세한 사항은 아래 참고사이트를 보라. 내가 햇갈렸다.

    4. 구조체 정의
    5. 클래스 선언 & 정의

    로 나눌 수 있다. 하이라이트 친 부분은 클래스 선언이 이중으로 되어있는 부분(?)으로 내가 opencv 커뮤니티에 질문한 것이다. 그리고 아래 4개 함수들만 cvtest namespace 밖에 나와있다.

    • cvTsZero
    • cvTsCopy
    • cvTsConvert
    • cvTsGEMM

    결국 복잡한 구조가 있다기보다는 그동안 쌓인 많은 코드들이 길게 늘어뜨려진 형식으로 되어있으며, 시간을 들여 하나씩 보면 될 것 같다.

    참고
    Advertisements

Written by gomiski

2014/02/11 at 5:50 am

Posted in C++, Lecture, opencv

Tagged with , , , , , ,

One Response

Subscribe to comments with RSS.

  1. […] 와  ts.hpp 를 거쳐서 다시 돌어온 부분이 바로 TS class 다. 이제 unit test 와 관련된 […]


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: