cv.hpp
上传用户:soukeisyuu
上传日期:2022-07-03
资源大小:5943k
文件大小:43k
源码类别:

波变换

开发平台:

Visual C++

  1. /*M///////////////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
  4. //
  5. //  By downloading, copying, installing or using the software you agree to this license.
  6. //  If you do not agree to this license, do not download, install,
  7. //  copy or use the software.
  8. //
  9. //
  10. //                           License Agreement
  11. //                For Open Source Computer Vision Library
  12. //
  13. // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
  14. // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
  15. // Third party copyrights are property of their respective owners.
  16. //
  17. // Redistribution and use in source and binary forms, with or without modification,
  18. // are permitted provided that the following conditions are met:
  19. //
  20. //   * Redistribution's of source code must retain the above copyright notice,
  21. //     this list of conditions and the following disclaimer.
  22. //
  23. //   * Redistribution's in binary form must reproduce the above copyright notice,
  24. //     this list of conditions and the following disclaimer in the documentation
  25. //     and/or other materials provided with the distribution.
  26. //
  27. //   * The name of the copyright holders may not be used to endorse or promote products
  28. //     derived from this software without specific prior written permission.
  29. //
  30. // This software is provided by the copyright holders and contributors "as is" and
  31. // any express or implied warranties, including, but not limited to, the implied
  32. // warranties of merchantability and fitness for a particular purpose are disclaimed.
  33. // In no event shall the Intel Corporation or contributors be liable for any direct,
  34. // indirect, incidental, special, exemplary, or consequential damages
  35. // (including, but not limited to, procurement of substitute goods or services;
  36. // loss of use, data, or profits; or business interruption) however caused
  37. // and on any theory of liability, whether in contract, strict liability,
  38. // or tort (including negligence or otherwise) arising in any way out of
  39. // the use of this software, even if advised of the possibility of such damage.
  40. //
  41. //M*/
  42. #ifndef _CV_HPP_
  43. #define _CV_HPP_
  44. #ifdef __cplusplus
  45. namespace cv
  46. {
  47. enum { BORDER_REPLICATE=IPL_BORDER_REPLICATE, BORDER_CONSTANT=IPL_BORDER_CONSTANT,
  48.        BORDER_REFLECT=IPL_BORDER_REFLECT, BORDER_REFLECT_101=IPL_BORDER_REFLECT_101,
  49.        BORDER_REFLECT101=BORDER_REFLECT_101, BORDER_WRAP=IPL_BORDER_WRAP,
  50.        BORDER_TRANSPARENT, BORDER_DEFAULT=BORDER_REFLECT_101, BORDER_ISOLATED=16 };
  51. CV_EXPORTS int borderInterpolate( int p, int len, int borderType );
  52. class CV_EXPORTS BaseRowFilter
  53. {
  54. public:
  55.     BaseRowFilter();
  56.     virtual ~BaseRowFilter();
  57.     virtual void operator()(const uchar* src, uchar* dst,
  58.                             int width, int cn) = 0;
  59.     int ksize, anchor;
  60. };
  61. class CV_EXPORTS BaseColumnFilter
  62. {
  63. public:
  64.     BaseColumnFilter();
  65.     virtual ~BaseColumnFilter();
  66.     virtual void operator()(const uchar** src, uchar* dst, int dststep,
  67.                             int dstcount, int width) = 0;
  68.     virtual void reset();
  69.     int ksize, anchor;
  70. };
  71. class CV_EXPORTS BaseFilter
  72. {
  73. public:
  74.     BaseFilter();
  75.     virtual ~BaseFilter();
  76.     virtual void operator()(const uchar** src, uchar* dst, int dststep,
  77.                             int dstcount, int width, int cn) = 0;
  78.     virtual void reset();
  79.     Size ksize;
  80.     Point anchor;
  81. };
  82. class CV_EXPORTS FilterEngine
  83. {
  84. public:
  85.     FilterEngine();
  86.     FilterEngine(const Ptr<BaseFilter>& _filter2D,
  87.                  const Ptr<BaseRowFilter>& _rowFilter,
  88.                  const Ptr<BaseColumnFilter>& _columnFilter,
  89.                  int srcType, int dstType, int bufType,
  90.                  int _rowBorderType=BORDER_REPLICATE,
  91.                  int _columnBorderType=-1,
  92.                  const Scalar& _borderValue=Scalar());
  93.     virtual ~FilterEngine();
  94.     void init(const Ptr<BaseFilter>& _filter2D,
  95.               const Ptr<BaseRowFilter>& _rowFilter,
  96.               const Ptr<BaseColumnFilter>& _columnFilter,
  97.               int srcType, int dstType, int bufType,
  98.               int _rowBorderType=BORDER_REPLICATE, int _columnBorderType=-1,
  99.               const Scalar& _borderValue=Scalar());
  100.     virtual int start(Size wholeSize, Rect roi, int maxBufRows=-1);
  101.     virtual int start(const Mat& src, const Rect& srcRoi=Rect(0,0,-1,-1),
  102.                       bool isolated=false, int maxBufRows=-1);
  103.     virtual int proceed(const uchar* src, int srcStep, int srcCount,
  104.                         uchar* dst, int dstStep);
  105.     virtual void apply( const Mat& src, Mat& dst,
  106.                         const Rect& srcRoi=Rect(0,0,-1,-1),
  107.                         Point dstOfs=Point(0,0),
  108.                         bool isolated=false);
  109.     bool isSeparable() const { return (const BaseFilter*)filter2D == 0; }
  110.     int remainingInputRows() const;
  111.     int remainingOutputRows() const;
  112.     
  113.     int srcType, dstType, bufType;
  114.     Size ksize;
  115.     Point anchor;
  116.     int maxWidth;
  117.     Size wholeSize;
  118.     Rect roi;
  119.     int dx1, dx2;
  120.     int rowBorderType, columnBorderType;
  121.     vector<int> borderTab;
  122.     int borderElemSize;
  123.     vector<uchar> ringBuf;
  124.     vector<uchar> srcRow;
  125.     vector<uchar> constBorderValue;
  126.     vector<uchar> constBorderRow;
  127.     int bufStep, startY, startY0, endY, rowCount, dstY;
  128.     vector<uchar*> rows;
  129.     
  130.     Ptr<BaseFilter> filter2D;
  131.     Ptr<BaseRowFilter> rowFilter;
  132.     Ptr<BaseColumnFilter> columnFilter;
  133. };
  134. enum { KERNEL_GENERAL=0, KERNEL_SYMMETRICAL=1, KERNEL_ASYMMETRICAL=2,
  135.        KERNEL_SMOOTH=4, KERNEL_INTEGER=8 };
  136. CV_EXPORTS int getKernelType(const Mat& kernel, Point anchor);
  137. CV_EXPORTS Ptr<BaseRowFilter> getLinearRowFilter(int srcType, int bufType,
  138.                                             const Mat& kernel, int anchor,
  139.                                             int symmetryType);
  140. CV_EXPORTS Ptr<BaseColumnFilter> getLinearColumnFilter(int bufType, int dstType,
  141.                                             const Mat& kernel, int anchor,
  142.                                             int symmetryType, double delta=0,
  143.                                             int bits=0);
  144. CV_EXPORTS Ptr<BaseFilter> getLinearFilter(int srcType, int dstType,
  145.                                            const Mat& kernel,
  146.                                            Point anchor=Point(-1,-1),
  147.                                            double delta=0, int bits=0);
  148. CV_EXPORTS Ptr<FilterEngine> createSeparableLinearFilter(int srcType, int dstType,
  149.                           const Mat& rowKernel, const Mat& columnKernel,
  150.                           Point _anchor=Point(-1,-1), double delta=0,
  151.                           int _rowBorderType=BORDER_DEFAULT,
  152.                           int _columnBorderType=-1,
  153.                           const Scalar& _borderValue=Scalar());
  154. CV_EXPORTS Ptr<FilterEngine> createLinearFilter(int srcType, int dstType,
  155.                  const Mat& kernel, Point _anchor=Point(-1,-1),
  156.                  double delta=0, int _rowBorderType=BORDER_DEFAULT,
  157.                  int _columnBorderType=-1, const Scalar& _borderValue=Scalar());
  158. CV_EXPORTS Mat getGaussianKernel( int ksize, double sigma, int ktype=CV_64F );
  159. CV_EXPORTS Ptr<FilterEngine> createGaussianFilter( int type, Size ksize,
  160.                                     double sigma1, double sigma2=0,
  161.                                     int borderType=BORDER_DEFAULT);
  162. CV_EXPORTS void getDerivKernels( Mat& kx, Mat& ky, int dx, int dy, int ksize,
  163.                                  bool normalize=false, int ktype=CV_32F );
  164. CV_EXPORTS Ptr<FilterEngine> createDerivFilter( int srcType, int dstType,
  165.                                         int dx, int dy, int ksize,
  166.                                         int borderType=BORDER_DEFAULT );
  167. CV_EXPORTS Ptr<BaseRowFilter> getRowSumFilter(int srcType, int sumType,
  168.                                                  int ksize, int anchor=-1);
  169. CV_EXPORTS Ptr<BaseColumnFilter> getColumnSumFilter(int sumType, int dstType,
  170.                                                        int ksize, int anchor=-1,
  171.                                                        double scale=1);
  172. CV_EXPORTS Ptr<FilterEngine> createBoxFilter( int srcType, int dstType, Size ksize,
  173.                                                  Point anchor=Point(-1,-1),
  174.                                                  bool normalize=true,
  175.                                                  int borderType=BORDER_DEFAULT);
  176. enum { MORPH_ERODE=0, MORPH_DILATE=1, MORPH_OPEN=2, MORPH_CLOSE=3,
  177.        MORPH_GRADIENT=4, MORPH_TOPHAT=5, MORPH_BLACKHAT=6 };
  178. CV_EXPORTS Ptr<BaseRowFilter> getMorphologyRowFilter(int op, int type, int ksize, int anchor=-1);
  179. CV_EXPORTS Ptr<BaseColumnFilter> getMorphologyColumnFilter(int op, int type, int ksize, int anchor=-1);
  180. CV_EXPORTS Ptr<BaseFilter> getMorphologyFilter(int op, int type, const Mat& kernel,
  181.                                                Point anchor=Point(-1,-1));
  182. static inline Scalar morphologyDefaultBorderValue() { return Scalar::all(DBL_MAX); }
  183. CV_EXPORTS Ptr<FilterEngine> createMorphologyFilter(int op, int type, const Mat& kernel,
  184.                     Point anchor=Point(-1,-1), int _rowBorderType=BORDER_CONSTANT,
  185.                     int _columnBorderType=-1,
  186.                     const Scalar& _borderValue=morphologyDefaultBorderValue());
  187. enum { MORPH_RECT=0, MORPH_CROSS=1, MORPH_ELLIPSE=2 };
  188. CV_EXPORTS Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1));
  189. CV_EXPORTS void copyMakeBorder( const Mat& src, Mat& dst,
  190.                                 int top, int bottom, int left, int right,
  191.                                 int borderType, const Scalar& value=Scalar() );
  192. CV_EXPORTS void medianBlur( const Mat& src, Mat& dst, int ksize );
  193. CV_EXPORTS void GaussianBlur( const Mat& src, Mat& dst, Size ksize,
  194.                               double sigma1, double sigma2=0,
  195.                               int borderType=BORDER_DEFAULT );
  196. CV_EXPORTS void bilateralFilter( const Mat& src, Mat& dst, int d,
  197.                                  double sigmaColor, double sigmaSpace,
  198.                                  int borderType=BORDER_DEFAULT );
  199. CV_EXPORTS void boxFilter( const Mat& src, Mat& dst, int ddepth,
  200.                            Size ksize, Point anchor=Point(-1,-1),
  201.                            bool normalize=true,
  202.                            int borderType=BORDER_DEFAULT );
  203. static inline void blur( const Mat& src, Mat& dst,
  204.                          Size ksize, Point anchor=Point(-1,-1),
  205.                          int borderType=BORDER_DEFAULT )
  206. {
  207.     boxFilter( src, dst, -1, ksize, anchor, true, borderType );
  208. }
  209. CV_EXPORTS void filter2D( const Mat& src, Mat& dst, int ddepth,
  210.                           const Mat& kernel, Point anchor=Point(-1,-1),
  211.                           double delta=0, int borderType=BORDER_DEFAULT );
  212. CV_EXPORTS void sepFilter2D( const Mat& src, Mat& dst, int ddepth,
  213.                              const Mat& kernelX, const Mat& kernelY,
  214.                              Point anchor=Point(-1,-1),
  215.                              double delta=0, int borderType=BORDER_DEFAULT );
  216. CV_EXPORTS void Sobel( const Mat& src, Mat& dst, int ddepth,
  217.                        int dx, int dy, int ksize=3,
  218.                        double scale=1, double delta=0,
  219.                        int borderType=BORDER_DEFAULT );
  220. CV_EXPORTS void Scharr( const Mat& src, Mat& dst, int ddepth,
  221.                         int dx, int dy, double scale=1, double delta=0,
  222.                         int borderType=BORDER_DEFAULT );
  223. CV_EXPORTS void Laplacian( const Mat& src, Mat& dst, int ddepth,
  224.                            int ksize=1, double scale=1, double delta=0,
  225.                            int borderType=BORDER_DEFAULT );
  226. CV_EXPORTS void Canny( const Mat& image, Mat& edges,
  227.                        double threshold1, double threshold2,
  228.                        int apertureSize=3, bool L2gradient=false );
  229. CV_EXPORTS void cornerMinEigenVal( const Mat& src, Mat& dst,
  230.                                    int blockSize, int ksize=3,
  231.                                    int borderType=BORDER_DEFAULT );
  232. CV_EXPORTS void cornerHarris( const Mat& src, Mat& dst, int blockSize,
  233.                               int ksize, double k,
  234.                               int borderType=BORDER_DEFAULT );
  235. CV_EXPORTS void cornerEigenValsAndVecs( const Mat& src, Mat& dst,
  236.                                         int blockSize, int ksize,
  237.                                         int borderType=BORDER_DEFAULT );
  238. CV_EXPORTS void preCornerDetect( const Mat& src, Mat& dst, int ksize,
  239.                                  int borderType=BORDER_DEFAULT );
  240. CV_EXPORTS void cornerSubPix( const Mat& image, vector<Point2f>& corners,
  241.                               Size winSize, Size zeroZone,
  242.                               TermCriteria criteria );
  243. CV_EXPORTS void goodFeaturesToTrack( const Mat& image, vector<Point2f>& corners,
  244.                                      int maxCorners, double qualityLevel, double minDistance,
  245.                                      const Mat& mask=Mat(), int blockSize=3,
  246.                                      bool useHarrisDetector=false, double k=0.04 );
  247. CV_EXPORTS void HoughLines( const Mat& image, vector<Vec2f>& lines,
  248.                             double rho, double theta, int threshold,
  249.                             double srn=0, double stn=0 );
  250. CV_EXPORTS void HoughLinesP( Mat& image, vector<Vec4i>& lines,
  251.                              double rho, double theta, int threshold,
  252.                              double minLineLength=0, double maxLineGap=0 );
  253. CV_EXPORTS void HoughCircles( const Mat& image, vector<Vec3f>& circles,
  254.                               int method, double dp, double minDist,
  255.                               double param1=100, double param2=100,
  256.                               int minRadius=0, int maxRadius=0 );
  257. CV_EXPORTS void erode( const Mat& src, Mat& dst, const Mat& kernel,
  258.                        Point anchor=Point(-1,-1), int iterations=1,
  259.                        int borderType=BORDER_CONSTANT,
  260.                        const Scalar& borderValue=morphologyDefaultBorderValue() );
  261. CV_EXPORTS void dilate( const Mat& src, Mat& dst, const Mat& kernel,
  262.                         Point anchor=Point(-1,-1), int iterations=1,
  263.                         int borderType=BORDER_CONSTANT,
  264.                         const Scalar& borderValue=morphologyDefaultBorderValue() );
  265. CV_EXPORTS void morphologyEx( const Mat& src, Mat& dst, int op, const Mat& kernel,
  266.                               Point anchor=Point(-1,-1), int iterations=1,
  267.                               int borderType=BORDER_CONSTANT,
  268.                               const Scalar& borderValue=morphologyDefaultBorderValue() );
  269. enum { INTER_NEAREST=0, INTER_LINEAR=1, INTER_CUBIC=2, INTER_AREA=3,
  270.        INTER_LANCZOS4=4, INTER_MAX=7, WARP_INVERSE_MAP=16 };
  271. CV_EXPORTS void resize( const Mat& src, Mat& dst,
  272.                         Size dsize=Size(), double fx=0, double fy=0,
  273.                         int interpolation=INTER_LINEAR );
  274. CV_EXPORTS void warpAffine( const Mat& src, Mat& dst,
  275.                             const Mat& M, Size dsize,
  276.                             int flags=INTER_LINEAR,
  277.                             int borderMode=BORDER_CONSTANT,
  278.                             const Scalar& borderValue=Scalar());
  279. CV_EXPORTS void warpPerspective( const Mat& src, Mat& dst,
  280.                                  const Mat& M, Size dsize,
  281.                                  int flags=INTER_LINEAR,
  282.                                  int borderMode=BORDER_CONSTANT,
  283.                                  const Scalar& borderValue=Scalar());
  284. CV_EXPORTS void remap( const Mat& src, Mat& dst, const Mat& map1, const Mat& map2,
  285.                        int interpolation, int borderMode=BORDER_CONSTANT,
  286.                        const Scalar& borderValue=Scalar());
  287. CV_EXPORTS void convertMaps( const Mat& map1, const Mat& map2, Mat& dstmap1, Mat& dstmap2,
  288.                              int dstmap1type, bool nninterpolation=false );
  289. CV_EXPORTS Mat getRotationMatrix2D( Point2f center, double angle, double scale );
  290. CV_EXPORTS Mat getPerspectiveTransform( const Point2f src[], const Point2f dst[] );
  291. CV_EXPORTS Mat getAffineTransform( const Point2f src[], const Point2f dst[] );
  292. CV_EXPORTS void invertAffineTransform(const Mat& M, Mat& iM);
  293. CV_EXPORTS void getRectSubPix( const Mat& image, Size patchSize,
  294.                                Point2f center, Mat& patch, int patchType=-1 );
  295. CV_EXPORTS void integral( const Mat& src, Mat& sum, int sdepth=-1 );
  296. CV_EXPORTS void integral( const Mat& src, Mat& sum, Mat& sqsum, int sdepth=-1 );
  297. CV_EXPORTS void integral( const Mat& src, Mat& sum, Mat& sqsum, Mat& tilted, int sdepth=-1 );
  298. CV_EXPORTS void accumulate( const Mat& src, Mat& dst, const Mat& mask=Mat() );
  299. CV_EXPORTS void accumulateSquare( const Mat& src, Mat& dst, const Mat& mask=Mat() );
  300. CV_EXPORTS void accumulateProduct( const Mat& src1, const Mat& src2,
  301.                                    Mat& dst, const Mat& mask=Mat() );
  302. CV_EXPORTS void accumulateWeighted( const Mat& src, Mat& dst,
  303.                                     double alpha, const Mat& mask=Mat() );
  304. enum { THRESH_BINARY=0, THRESH_BINARY_INV=1, THRESH_TRUNC=2, THRESH_TOZERO=3,
  305.        THRESH_TOZERO_INV=4, THRESH_MASK=7, THRESH_OTSU=8 };
  306. CV_EXPORTS double threshold( const Mat& src, Mat& dst, double thresh, double maxval, int type );
  307. enum { ADAPTIVE_THRESH_MEAN_C=0, ADAPTIVE_THRESH_GAUSSIAN_C=1 };
  308. CV_EXPORTS void adaptiveThreshold( const Mat& src, Mat& dst, double maxValue,
  309.                                    int adaptiveMethod, int thresholdType,
  310.                                    int blockSize, double C );
  311. CV_EXPORTS void pyrDown( const Mat& src, Mat& dst, const Size& dstsize=Size());
  312. CV_EXPORTS void pyrUp( const Mat& src, Mat& dst, const Size& dstsize=Size());
  313. CV_EXPORTS void buildPyramid( const Mat& src, vector<Mat>& dst, int maxlevel );
  314. CV_EXPORTS void undistort( const Mat& src, Mat& dst, const Mat& cameraMatrix,
  315.                            const Mat& distCoeffs, const Mat& newCameraMatrix=Mat() );
  316. CV_EXPORTS void initUndistortRectifyMap( const Mat& cameraMatrix, const Mat& distCoeffs,
  317.                            const Mat& R, const Mat& newCameraMatrix,
  318.                            Size size, int m1type, Mat& map1, Mat& map2 );
  319. CV_EXPORTS Mat getDefaultNewCameraMatrix( const Mat& cameraMatrix, Size imgsize=Size(),
  320.                                           bool centerPrincipalPoint=false );
  321. enum { OPTFLOW_USE_INITIAL_FLOW=4, OPTFLOW_FARNEBACK_GAUSSIAN=256 };
  322. CV_EXPORTS void calcOpticalFlowPyrLK( const Mat& prevImg, const Mat& nextImg,
  323.                            const vector<Point2f>& prevPts, vector<Point2f>& nextPts,
  324.                            vector<uchar>& status, vector<float>& err,
  325.                            Size winSize=Size(15,15), int maxLevel=3,
  326.                            TermCriteria criteria=TermCriteria(
  327.                             TermCriteria::COUNT+TermCriteria::EPS,
  328.                             30, 0.01),
  329.                            double derivLambda=0.5,
  330.                            int flags=0 );
  331. CV_EXPORTS void calcOpticalFlowFarneback( const Mat& prev0, const Mat& next0,
  332.                                Mat& flow0, double pyr_scale, int levels, int winsize,
  333.                                int iterations, int poly_n, double poly_sigma, int flags );
  334.     
  335. template<> inline void Ptr<CvHistogram>::delete_obj()
  336. { cvReleaseHist(&obj); }
  337.     
  338. CV_EXPORTS void calcHist( const Mat* images, int nimages,
  339.                           const int* channels, const Mat& mask,
  340.                           MatND& hist, int dims, const int* histSize,
  341.                           const float** ranges, bool uniform=true,
  342.                           bool accumulate=false );
  343. CV_EXPORTS void calcHist( const Mat* images, int nimages,
  344.                           const int* channels, const Mat& mask,
  345.                           SparseMat& hist, int dims, const int* histSize,
  346.                           const float** ranges, bool uniform=true,
  347.                           bool accumulate=false );
  348.     
  349. CV_EXPORTS void calcBackProject( const Mat* images, int nimages,
  350.                                  const int* channels, const MatND& hist,
  351.                                  Mat& backProject, const float** ranges,
  352.                                  double scale=1, bool uniform=true );
  353.     
  354. CV_EXPORTS void calcBackProject( const Mat* images, int nimages,
  355.                                  const int* channels, const SparseMat& hist,
  356.                                  Mat& backProject, const float** ranges,
  357.                                  double scale=1, bool uniform=true );
  358. CV_EXPORTS double compareHist( const MatND& H1, const MatND& H2, int method );
  359. CV_EXPORTS double compareHist( const SparseMat& H1, const SparseMat& H2, int method );
  360. CV_EXPORTS void equalizeHist( const Mat& src, Mat& dst );
  361. CV_EXPORTS void watershed( const Mat& image, Mat& markers );
  362. enum { INPAINT_NS=CV_INPAINT_NS, INPAINT_TELEA=CV_INPAINT_TELEA };
  363. CV_EXPORTS void inpaint( const Mat& src, const Mat& inpaintMask,
  364.                          Mat& dst, double inpaintRange, int flags );
  365. CV_EXPORTS void distanceTransform( const Mat& src, Mat& dst, Mat& labels,
  366.                                    int distanceType, int maskSize );
  367. CV_EXPORTS void distanceTransform( const Mat& src, Mat& dst,
  368.                                    int distanceType, int maskSize );
  369. enum { FLOODFILL_FIXED_RANGE = 1 << 16,
  370.        FLOODFILL_MASK_ONLY = 1 << 17 };
  371. CV_EXPORTS int floodFill( Mat& image,
  372.                           Point seedPoint, Scalar newVal, Rect* rect=0,
  373.                           Scalar loDiff=Scalar(), Scalar upDiff=Scalar(),
  374.                           int flags=4 );
  375. CV_EXPORTS int floodFill( Mat& image, Mat& mask,
  376.                           Point seedPoint, Scalar newVal, Rect* rect=0,
  377.                           Scalar loDiff=Scalar(), Scalar upDiff=Scalar(),
  378.                           int flags=4 );
  379. CV_EXPORTS void cvtColor( const Mat& src, Mat& dst, int code, int dstCn=0 );
  380. class CV_EXPORTS Moments
  381. {
  382. public:
  383.     Moments();
  384.     Moments(double m00, double m10, double m01, double m20, double m11,
  385.             double m02, double m30, double m21, double m12, double m03 );
  386.     Moments( const CvMoments& moments );
  387.     operator CvMoments() const;
  388.     
  389.     double  m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; // spatial moments
  390.     double  mu20, mu11, mu02, mu30, mu21, mu12, mu03; // central moments
  391.     double  nu20, nu11, nu02, nu30, nu21, nu12, nu03; // central normalized moments
  392. };
  393. CV_EXPORTS Moments moments( const Mat& array, bool binaryImage=false );
  394. CV_EXPORTS void HuMoments( const Moments& moments, double hu[7] );
  395. enum { TM_SQDIFF=CV_TM_SQDIFF, TM_SQDIFF_NORMED=CV_TM_SQDIFF_NORMED,
  396.        TM_CCORR=CV_TM_CCORR, TM_CCORR_NORMED=CV_TM_CCORR_NORMED,
  397.        TM_CCOEFF=CV_TM_CCOEFF, TM_CCOEFF_NORMED=CV_TM_CCOEFF_NORMED };
  398. CV_EXPORTS void matchTemplate( const Mat& image, const Mat& templ, Mat& result, int method );
  399. enum { RETR_EXTERNAL=CV_RETR_EXTERNAL, RETR_LIST=CV_RETR_LIST,
  400.        RETR_CCOMP=CV_RETR_CCOMP, RETR_TREE=CV_RETR_TREE };
  401. enum { CHAIN_APPROX_NONE=CV_CHAIN_APPROX_NONE,
  402.        CHAIN_APPROX_SIMPLE=CV_CHAIN_APPROX_SIMPLE,
  403.        CHAIN_APPROX_TC89_L1=CV_CHAIN_APPROX_TC89_L1,
  404.        CHAIN_APPROX_TC89_KCOS=CV_CHAIN_APPROX_TC89_KCOS };
  405. CV_EXPORTS void findContours( const Mat& image, vector<vector<Point> >& contours,
  406.                               vector<Vec4i>& hierarchy, int mode,
  407.                               int method, Point offset=Point());
  408. CV_EXPORTS void findContours( const Mat& image, vector<vector<Point> >& contours,
  409.                               int mode, int method, Point offset=Point());
  410. CV_EXPORTS void drawContours( Mat& image, const vector<vector<Point> >& contours,
  411.                               int contourIdx, const Scalar& color,
  412.                               int thickness=1, int lineType=8,
  413.                               const vector<Vec4i>& hierarchy=vector<Vec4i>(),
  414.                               int maxLevel=INT_MAX, Point offset=Point() );
  415. CV_EXPORTS void approxPolyDP( const Mat& curve,
  416.                               vector<Point>& approxCurve,
  417.                               double epsilon, bool closed );
  418. CV_EXPORTS void approxPolyDP( const Mat& curve,
  419.                               vector<Point2f>& approxCurve,
  420.                               double epsilon, bool closed );
  421.     
  422. CV_EXPORTS double arcLength( const Mat& curve, bool closed );
  423. CV_EXPORTS Rect boundingRect( const Mat& points );
  424. CV_EXPORTS double contourArea( const Mat& contour );    
  425. CV_EXPORTS RotatedRect minAreaRect( const Mat& points );
  426. CV_EXPORTS void minEnclosingCircle( const Mat& points,
  427.                                     Point2f& center, float& radius );    
  428. CV_EXPORTS double matchShapes( const Mat& contour1,
  429.                                const Mat& contour2,
  430.                                int method, double parameter );
  431.     
  432. CV_EXPORTS void convexHull( const Mat& points, vector<int>& hull, bool clockwise=false );
  433. CV_EXPORTS void convexHull( const Mat& points, vector<Point>& hull, bool clockwise=false );
  434. CV_EXPORTS void convexHull( const Mat& points, vector<Point2f>& hull, bool clockwise=false );
  435. CV_EXPORTS bool isContourConvex( const Mat& contour );
  436. CV_EXPORTS RotatedRect fitEllipse( const Mat& points );
  437. CV_EXPORTS void fitLine( const Mat& points, Vec4f& line, int distType,
  438.                          double param, double reps, double aeps );
  439. CV_EXPORTS void fitLine( const Mat& points, Vec6f& line, int distType,
  440.                          double param, double reps, double aeps );
  441. CV_EXPORTS double pointPolygonTest( const Mat& contour,
  442.                                     Point2f pt, bool measureDist );
  443. CV_EXPORTS Mat estimateRigidTransform( const Mat& A, const Mat& B,
  444.                                        bool fullAffine );
  445. CV_EXPORTS void updateMotionHistory( const Mat& silhouette, Mat& mhi,
  446.                                      double timestamp, double duration );
  447. CV_EXPORTS void calcMotionGradient( const Mat& mhi, Mat& mask,
  448.                                     Mat& orientation,
  449.                                     double delta1, double delta2,
  450.                                     int apertureSize=3 );
  451. CV_EXPORTS double calcGlobalOrientation( const Mat& orientation, const Mat& mask,
  452.                                          const Mat& mhi, double timestamp,
  453.                                          double duration );
  454. // TODO: need good API for cvSegmentMotion
  455. CV_EXPORTS RotatedRect CamShift( const Mat& probImage, Rect& window,
  456.                                  TermCriteria criteria );
  457. CV_EXPORTS int meanShift( const Mat& probImage, Rect& window,
  458.                           TermCriteria criteria );
  459. CV_EXPORTS int estimateAffine3D(const Mat& from, const Mat& to, Mat& out,
  460.                                 vector<uchar>& outliers,
  461.                                 double param1 = 3.0, double param2 = 0.99);
  462. class CV_EXPORTS KalmanFilter
  463. {
  464. public:
  465.     KalmanFilter();
  466.     KalmanFilter(int dynamParams, int measureParams, int controlParams=0);
  467.     void init(int dynamParams, int measureParams, int controlParams=0);
  468.     const Mat& predict(const Mat& control=Mat());
  469.     const Mat& correct(const Mat& measurement);
  470.     Mat statePre;           // predicted state (x'(k)):
  471.                             //    x(k)=A*x(k-1)+B*u(k)
  472.     Mat statePost;          // corrected state (x(k)):
  473.                             //    x(k)=x'(k)+K(k)*(z(k)-H*x'(k))
  474.     Mat transitionMatrix;   // state transition matrix (A)
  475.     Mat controlMatrix;      // control matrix (B)
  476.                             //   (it is not used if there is no control)
  477.     Mat measurementMatrix;  // measurement matrix (H)
  478.     Mat processNoiseCov;    // process noise covariance matrix (Q)
  479.     Mat measurementNoiseCov;// measurement noise covariance matrix (R)
  480.     Mat errorCovPre;        // priori error estimate covariance matrix (P'(k)):
  481.                             //    P'(k)=A*P(k-1)*At + Q)*/
  482.     Mat gain;               // Kalman gain matrix (K(k)):
  483.                             //    K(k)=P'(k)*Ht*inv(H*P'(k)*Ht+R)
  484.     Mat errorCovPost;       // posteriori error estimate covariance matrix (P(k)):
  485.                             //    P(k)=(I-K(k)*H)*P'(k)
  486.     Mat temp1;              // temporary matrices
  487.     Mat temp2;
  488.     Mat temp3;
  489.     Mat temp4;
  490.     Mat temp5;
  491. };
  492. ///////////////////////////// Object Detection ////////////////////////////
  493. CV_EXPORTS void groupRectangles(vector<Rect>& rectList, int groupThreshold, double eps=0.2);
  494.         
  495. class CV_EXPORTS FeatureEvaluator
  496. {
  497. public:    
  498.     enum { HAAR = 0, LBP = 1 };
  499.     virtual ~FeatureEvaluator();
  500.     virtual bool read(const FileNode& node);
  501.     virtual Ptr<FeatureEvaluator> clone() const;
  502.     virtual int getFeatureType() const;
  503.     
  504.     virtual bool setImage(const Mat&, Size origWinSize);
  505.     virtual bool setWindow(Point p);
  506.     virtual double calcOrd(int featureIdx) const;
  507.     virtual int calcCat(int featureIdx) const;
  508.     static Ptr<FeatureEvaluator> create(int type);
  509. };
  510.     
  511. template<> inline void Ptr<CvHaarClassifierCascade>::delete_obj()
  512. { cvReleaseHaarClassifierCascade(&obj); }    
  513.    
  514. class CV_EXPORTS CascadeClassifier
  515. {
  516. public:
  517.     struct CV_EXPORTS DTreeNode
  518.     {
  519.         int featureIdx;
  520.         float threshold; // for ordered features only
  521.         int left;
  522.         int right;
  523.     };
  524.     
  525.     struct CV_EXPORTS DTree
  526.     {
  527.         int nodeCount;
  528.     };
  529.     
  530.     struct CV_EXPORTS Stage
  531.     {
  532.         int first;
  533.         int ntrees;
  534.         float threshold;
  535.     };
  536.     
  537.     enum { BOOST = 0 };
  538.     enum { DO_CANNY_PRUNING = CV_HAAR_DO_CANNY_PRUNING,
  539.            SCALE_IMAGE = CV_HAAR_SCALE_IMAGE,
  540.            FIND_BIGGEST_OBJECT = CV_HAAR_FIND_BIGGEST_OBJECT,
  541.            DO_ROUGH_SEARCH = CV_HAAR_DO_ROUGH_SEARCH };
  542.     CascadeClassifier();
  543.     CascadeClassifier(const string& filename);
  544.     ~CascadeClassifier();
  545.     
  546.     bool empty() const;
  547.     bool load(const string& filename);
  548.     bool read(const FileNode& node);
  549.     void detectMultiScale( const Mat& image,
  550.                            vector<Rect>& objects,
  551.                            double scaleFactor=1.1,
  552.                            int minNeighbors=3, int flags=0,
  553.                            Size minSize=Size());
  554.  
  555.     bool setImage( Ptr<FeatureEvaluator>&, const Mat& );
  556.     int runAt( Ptr<FeatureEvaluator>&, Point );
  557.     bool is_stump_based;
  558.     int stageType;
  559.     int featureType;
  560.     int ncategories;
  561.     Size origWinSize;
  562.     
  563.     vector<Stage> stages;
  564.     vector<DTree> classifiers;
  565.     vector<DTreeNode> nodes;
  566.     vector<float> leaves;
  567.     vector<int> subsets;
  568.     Ptr<FeatureEvaluator> feval;
  569.     Ptr<CvHaarClassifierCascade> oldCascade;
  570. };
  571.     
  572. CV_EXPORTS void undistortPoints( const Mat& src, vector<Point2f>& dst,
  573.                                  const Mat& cameraMatrix, const Mat& distCoeffs,
  574.                                  const Mat& R=Mat(), const Mat& P=Mat());
  575. CV_EXPORTS void undistortPoints( const Mat& src, Mat& dst,
  576.                                  const Mat& cameraMatrix, const Mat& distCoeffs,
  577.                                  const Mat& R=Mat(), const Mat& P=Mat());
  578. CV_EXPORTS void Rodrigues(const Mat& src, Mat& dst);
  579. CV_EXPORTS void Rodrigues(const Mat& src, Mat& dst, Mat& jacobian);
  580. enum { LMEDS=4, RANSAC=8 };
  581. CV_EXPORTS Mat findHomography( const Mat& srcPoints,
  582.                                const Mat& dstPoints,
  583.                                Mat& mask, int method=0,
  584.                                double ransacReprojThreshold=0 );
  585.     
  586. CV_EXPORTS Mat findHomography( const Mat& srcPoints,
  587.                                const Mat& dstPoints,
  588.                                vector<uchar>& mask, int method=0,
  589.                                double ransacReprojThreshold=0 );
  590. CV_EXPORTS Mat findHomography( const Mat& srcPoints,
  591.                                const Mat& dstPoints,
  592.                                int method=0, double ransacReprojThreshold=0 );
  593. /* Computes RQ decomposition for 3x3 matrices */
  594. CV_EXPORTS void RQDecomp3x3( const Mat& M, Mat& R, Mat& Q );
  595. CV_EXPORTS Vec3d RQDecomp3x3( const Mat& M, Mat& R, Mat& Q,
  596.                               Mat& Qx, Mat& Qy, Mat& Qz );
  597. CV_EXPORTS void decomposeProjectionMatrix( const Mat& projMatrix, Mat& cameraMatrix,
  598.                                            Mat& rotMatrix, Mat& transVect );
  599. CV_EXPORTS void decomposeProjectionMatrix( const Mat& projMatrix, Mat& cameraMatrix,
  600.                                            Mat& rotMatrix, Mat& transVect,
  601.                                            Mat& rotMatrixX, Mat& rotMatrixY,
  602.                                            Mat& rotMatrixZ, Vec3d& eulerAngles );
  603. CV_EXPORTS void matMulDeriv( const Mat& A, const Mat& B, Mat& dABdA, Mat& dABdB );
  604. CV_EXPORTS void composeRT( const Mat& rvec1, const Mat& tvec1,
  605.                            const Mat& rvec2, const Mat& tvec2,
  606.                            Mat& rvec3, Mat& tvec3 );
  607. CV_EXPORTS void composeRT( const Mat& rvec1, const Mat& tvec1,
  608.                            const Mat& rvec2, const Mat& tvec2,
  609.                            Mat& rvec3, Mat& tvec3,
  610.                            Mat& dr3dr1, Mat& dr3dt1,
  611.                            Mat& dr3dr2, Mat& dr3dt2,
  612.                            Mat& dt3dr1, Mat& dt3dt1,
  613.                            Mat& dt3dr2, Mat& dt3dt2 );
  614. CV_EXPORTS void projectPoints( const Mat& objectPoints,
  615.                                const Mat& rvec, const Mat& tvec,
  616.                                const Mat& cameraMatrix,
  617.                                const Mat& distCoeffs,
  618.                                vector<Point2f>& imagePoints );
  619. CV_EXPORTS void projectPoints( const Mat& objectPoints,
  620.                                const Mat& rvec, const Mat& tvec,
  621.                                const Mat& cameraMatrix,
  622.                                const Mat& distCoeffs,
  623.                                vector<Point2f>& imagePoints,
  624.                                Mat& dpdrot, Mat& dpdt, Mat& dpdf,
  625.                                Mat& dpdc, Mat& dpddist,
  626.                                double aspectRatio=0 );
  627. CV_EXPORTS void solvePnP( const Mat& objectPoints,
  628.                           const Mat& imagePoints,
  629.                           const Mat& cameraMatrix,
  630.                           const Mat& distCoeffs,
  631.                           Mat& rvec, Mat& tvec,
  632.                           bool useExtrinsicGuess=false );
  633. CV_EXPORTS Mat initCameraMatrix2D( const vector<vector<Point3f> >& objectPoints,
  634.                                    const vector<vector<Point2f> >& imagePoints,
  635.                                    Size imageSize, double aspectRatio=1. );
  636. enum { CALIB_CB_ADAPTIVE_THRESH = CV_CALIB_CB_ADAPTIVE_THRESH,
  637.        CALIB_CB_NORMALIZE_IMAGE = CV_CALIB_CB_NORMALIZE_IMAGE,
  638.        CALIB_CB_FILTER_QUADS = CV_CALIB_CB_FILTER_QUADS };
  639. CV_EXPORTS bool findChessboardCorners( const Mat& image, Size patternSize,
  640.                                        vector<Point2f>& corners,
  641.                                        int flags=CV_CALIB_CB_ADAPTIVE_THRESH+
  642.                                             CV_CALIB_CB_NORMALIZE_IMAGE );
  643. CV_EXPORTS void drawChessboardCorners( Mat& image, Size patternSize,
  644.                                        const Mat& corners,
  645.                                        bool patternWasFound );
  646. enum
  647. {
  648.     CALIB_USE_INTRINSIC_GUESS = CV_CALIB_USE_INTRINSIC_GUESS,
  649.     CALIB_FIX_ASPECT_RATIO = CV_CALIB_FIX_ASPECT_RATIO,
  650.     CALIB_FIX_PRINCIPAL_POINT = CV_CALIB_FIX_PRINCIPAL_POINT,
  651.     CALIB_ZERO_TANGENT_DIST = CV_CALIB_ZERO_TANGENT_DIST,
  652.     CALIB_FIX_FOCAL_LENGTH = CV_CALIB_FIX_FOCAL_LENGTH,
  653.     CALIB_FIX_K1 = CV_CALIB_FIX_K1,
  654.     CALIB_FIX_K2 = CV_CALIB_FIX_K2,
  655.     CALIB_FIX_K3 = CV_CALIB_FIX_K3,
  656.     // only for stereo
  657.     CALIB_FIX_INTRINSIC = CV_CALIB_FIX_INTRINSIC,
  658.     CALIB_SAME_FOCAL_LENGTH = CV_CALIB_SAME_FOCAL_LENGTH,
  659.     // for stereo rectification
  660.     CALIB_ZERO_DISPARITY = CV_CALIB_ZERO_DISPARITY
  661. };
  662. CV_EXPORTS void calibrateCamera( const vector<vector<Point3f> >& objectPoints,
  663.                                  const vector<vector<Point2f> >& imagePoints,
  664.                                  Size imageSize,
  665.                                  Mat& cameraMatrix, Mat& distCoeffs,
  666.                                  vector<Mat>& rvecs, vector<Mat>& tvecs,
  667.                                  int flags=0 );
  668. CV_EXPORTS void calibrationMatrixValues( const Mat& cameraMatrix,
  669.                                 Size imageSize,
  670.                                 double apertureWidth,
  671.                                 double apertureHeight,
  672.                                 double& fovx,
  673.                                 double& fovy,
  674.                                 double& focalLength,
  675.                                 Point2d& principalPoint,
  676.                                 double& aspectRatio );
  677. CV_EXPORTS void stereoCalibrate( const vector<vector<Point3f> >& objectPoints,
  678.                                  const vector<vector<Point2f> >& imagePoints1,
  679.                                  const vector<vector<Point2f> >& imagePoints2,
  680.                                  Mat& cameraMatrix1, Mat& distCoeffs1,
  681.                                  Mat& cameraMatrix2, Mat& distCoeffs2,
  682.                                  Size imageSize, Mat& R, Mat& T,
  683.                                  Mat& E, Mat& F,
  684.                                  TermCriteria criteria = TermCriteria(TermCriteria::COUNT+
  685.                                     TermCriteria::EPS, 30, 1e-6),
  686.                                  int flags=CALIB_FIX_INTRINSIC );
  687. CV_EXPORTS void stereoRectify( const Mat& cameraMatrix1, const Mat& distCoeffs1,
  688.                                const Mat& cameraMatrix2, const Mat& distCoeffs2,
  689.                                Size imageSize, const Mat& R, const Mat& T,
  690.                                Mat& R1, Mat& R2, Mat& P1, Mat& P2, Mat& Q,
  691.                                int flags=CALIB_ZERO_DISPARITY );
  692. CV_EXPORTS bool stereoRectifyUncalibrated( const Mat& points1,
  693.                                            const Mat& points2,
  694.                                            const Mat& F, Size imgSize,
  695.                                            Mat& H1, Mat& H2,
  696.                                            double threshold=5 );
  697. CV_EXPORTS void convertPointsHomogeneous( const Mat& src, vector<Point3f>& dst );
  698. CV_EXPORTS void convertPointsHomogeneous( const Mat& src, vector<Point2f>& dst );
  699. enum
  700.     FM_7POINT = CV_FM_7POINT,
  701.     FM_8POINT = CV_FM_8POINT,
  702.     FM_LMEDS = CV_FM_LMEDS,
  703.     FM_RANSAC = CV_FM_RANSAC
  704. };
  705. CV_EXPORTS Mat findFundamentalMat( const Mat& points1, const Mat& points2,
  706.                                    vector<uchar>& mask, int method=FM_RANSAC,
  707.                                    double param1=3., double param2=0.99 );
  708. CV_EXPORTS Mat findFundamentalMat( const Mat& points1, const Mat& points2,
  709.                                    int method=FM_RANSAC,
  710.                                    double param1=3., double param2=0.99 );
  711. CV_EXPORTS void computeCorrespondEpilines( const Mat& points1,
  712.                                            int whichImage, const Mat& F,
  713.                                            vector<Vec3f>& lines );
  714. template<> inline void Ptr<CvStereoBMState>::delete_obj()
  715. { cvReleaseStereoBMState(&obj); }
  716. // Block matching stereo correspondence algorithm
  717. class CV_EXPORTS StereoBM
  718. {
  719. public:
  720.     enum { NORMALIZED_RESPONSE = CV_STEREO_BM_NORMALIZED_RESPONSE,
  721.         BASIC_PRESET=CV_STEREO_BM_BASIC,
  722.         FISH_EYE_PRESET=CV_STEREO_BM_FISH_EYE,
  723.         NARROW_PRESET=CV_STEREO_BM_NARROW };
  724.     
  725.     StereoBM();
  726.     StereoBM(int preset, int ndisparities=0, int SADWindowSize=21);
  727.     void init(int preset, int ndisparities=0, int SADWindowSize=21);
  728.     void operator()( const Mat& left, const Mat& right, Mat& disparity );
  729.     Ptr<CvStereoBMState> state;
  730. };
  731. CV_EXPORTS void reprojectImageTo3D( const Mat& disparity,
  732.                                     Mat& _3dImage, const Mat& Q,
  733.                                     bool handleMissingValues=false );
  734. class CV_EXPORTS KeyPoint
  735. {
  736. public:    
  737.     KeyPoint() : pt(0,0), size(0), angle(-1), response(0), octave(0), class_id(-1) {}
  738.     KeyPoint(Point2f _pt, float _size, float _angle=-1,
  739.             float _response=0, int _octave=0, int _class_id=-1)
  740.             : pt(_pt), size(_size), angle(_angle),
  741.             response(_response), octave(_octave), class_id(_class_id) {}
  742.     KeyPoint(float x, float y, float _size, float _angle=-1,
  743.             float _response=0, int _octave=0, int _class_id=-1)
  744.             : pt(x, y), size(_size), angle(_angle),
  745.             response(_response), octave(_octave), class_id(_class_id) {}
  746.     
  747.     Point2f pt;
  748.     float size;
  749.     float angle;
  750.     float response;
  751.     int octave;
  752.     int class_id;
  753. };
  754. CV_EXPORTS void write(FileStorage& fs, const string& name, const vector<KeyPoint>& keypoints);
  755. CV_EXPORTS void read(const FileNode& node, vector<KeyPoint>& keypoints);    
  756. class CV_EXPORTS SURF : public CvSURFParams
  757. {
  758. public:
  759.     SURF();
  760.     SURF(double _hessianThreshold, int _nOctaves=4,
  761.          int _nOctaveLayers=2, bool _extended=false);
  762.     int descriptorSize() const;
  763.     void operator()(const Mat& img, const Mat& mask,
  764.                     vector<KeyPoint>& keypoints) const;
  765.     void operator()(const Mat& img, const Mat& mask,
  766.                     vector<KeyPoint>& keypoints,
  767.                     vector<float>& descriptors,
  768.                     bool useProvidedKeypoints=false) const;
  769. };
  770. class CV_EXPORTS MSER : public CvMSERParams
  771. {
  772. public:
  773.     MSER();
  774.     MSER( int _delta, int _min_area, int _max_area,
  775.           float _max_variation, float _min_diversity,
  776.           int _max_evolution, double _area_threshold,
  777.           double _min_margin, int _edge_blur_size );
  778.     void operator()(Mat& image, vector<vector<Point> >& msers, const Mat& mask) const;
  779. };
  780. class CV_EXPORTS StarDetector : CvStarDetectorParams
  781. {
  782. public:
  783.     StarDetector();
  784.     StarDetector(int _maxSize, int _responseThreshold,
  785.                  int _lineThresholdProjected,
  786.                  int _lineThresholdBinarized,
  787.                  int _suppressNonmaxSize);
  788.     void operator()(const Mat& image, vector<KeyPoint>& keypoints) const;
  789. };
  790.     
  791. }
  792. //////////////////////////////////////////////////////////////////////////////////////////
  793. class CV_EXPORTS CvLevMarq
  794. {
  795. public:
  796.     CvLevMarq();
  797.     CvLevMarq( int nparams, int nerrs, CvTermCriteria criteria=
  798.         cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,30,DBL_EPSILON),
  799.         bool completeSymmFlag=false );
  800.     ~CvLevMarq();
  801.     void init( int nparams, int nerrs, CvTermCriteria criteria=
  802.         cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,30,DBL_EPSILON),
  803.         bool completeSymmFlag=false );
  804.     bool update( const CvMat*& param, CvMat*& J, CvMat*& err );
  805.     bool updateAlt( const CvMat*& param, CvMat*& JtJ, CvMat*& JtErr, double*& errNorm );
  806.     void clear();
  807.     void step();
  808.     enum { DONE=0, STARTED=1, CALC_J=2, CHECK_ERR=3 };
  809.     CvMat* mask;
  810.     CvMat* prevParam;
  811.     CvMat* param;
  812.     CvMat* J;
  813.     CvMat* err;
  814.     CvMat* JtJ;
  815.     CvMat* JtJN;
  816.     CvMat* JtErr;
  817.     CvMat* JtJV;
  818.     CvMat* JtJW;
  819.     double prevErrNorm, errNorm;
  820.     int lambdaLg10;
  821.     CvTermCriteria criteria;
  822.     int state;
  823.     int iters;
  824.     bool completeSymmFlag;
  825. };
  826. // 2009-01-12, Xavier Delacour <xavier.delacour@gmail.com>
  827. struct lsh_hash {
  828.   int h1, h2;
  829. };
  830. struct CvLSHOperations
  831. {
  832.   virtual ~CvLSHOperations() {}
  833.   virtual int vector_add(const void* data) = 0;
  834.   virtual void vector_remove(int i) = 0;
  835.   virtual const void* vector_lookup(int i) = 0;
  836.   virtual void vector_reserve(int n) = 0;
  837.   virtual unsigned int vector_count() = 0;
  838.   virtual void hash_insert(lsh_hash h, int l, int i) = 0;
  839.   virtual void hash_remove(lsh_hash h, int l, int i) = 0;
  840.   virtual int hash_lookup(lsh_hash h, int l, int* ret_i, int ret_i_max) = 0;
  841. };
  842. #endif /* __cplusplus */
  843. #endif /* _CV_HPP_ */
  844. /* End of file. */