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 
43 #ifndef OPENCV_IMGPROC_TYPES_C_H
44 #define OPENCV_IMGPROC_TYPES_C_H
45 
46 #include "opencv2/core/core_c.h"
47 
48 #ifdef __cplusplus
49 extern "C" {
50 #endif
51 
52 /** @addtogroup imgproc_c
53   @{
54 */
55 
56 /** Connected component structure */
57 typedef struct CvConnectedComp
58 {
59     double area;    /**<area of the connected component  */
60     CvScalar value; /**<average color of the connected component */
61     CvRect rect;    /**<ROI of the component  */
62     CvSeq* contour; /**<optional component boundary
63                       (the contour might have child contours corresponding to the holes)*/
64 }
65 CvConnectedComp;
66 
67 /** Image smooth methods */
68 enum SmoothMethod_c
69 {
70     /** linear convolution with \f$\texttt{size1}\times\texttt{size2}\f$ box kernel (all 1's). If
71     you want to smooth different pixels with different-size box kernels, you can use the integral
72     image that is computed using integral */
73     CV_BLUR_NO_SCALE =0,
74     /** linear convolution with \f$\texttt{size1}\times\texttt{size2}\f$ box kernel (all
75     1's) with subsequent scaling by \f$1/(\texttt{size1}\cdot\texttt{size2})\f$ */
76     CV_BLUR  =1,
77     /** linear convolution with a \f$\texttt{size1}\times\texttt{size2}\f$ Gaussian kernel */
78     CV_GAUSSIAN  =2,
79     /** median filter with a \f$\texttt{size1}\times\texttt{size1}\f$ square aperture */
80     CV_MEDIAN =3,
81     /** bilateral filter with a \f$\texttt{size1}\times\texttt{size1}\f$ square aperture, color
82     sigma= sigma1 and spatial sigma= sigma2. If size1=0, the aperture square side is set to
83     cvRound(sigma2\*1.5)\*2+1. See cv::bilateralFilter */
84     CV_BILATERAL =4
85 };
86 
87 /** Filters used in pyramid decomposition */
88 enum
89 {
90     CV_GAUSSIAN_5x5 = 7
91 };
92 
93 /** Special filters */
94 enum
95 {
96     CV_SCHARR =-1,
97     CV_MAX_SOBEL_KSIZE =7
98 };
99 
100 /** Constants for color conversion */
101 enum
102 {
103     CV_BGR2BGRA    =0,
104     CV_RGB2RGBA    =CV_BGR2BGRA,
105 
106     CV_BGRA2BGR    =1,
107     CV_RGBA2RGB    =CV_BGRA2BGR,
108 
109     CV_BGR2RGBA    =2,
110     CV_RGB2BGRA    =CV_BGR2RGBA,
111 
112     CV_RGBA2BGR    =3,
113     CV_BGRA2RGB    =CV_RGBA2BGR,
114 
115     CV_BGR2RGB     =4,
116     CV_RGB2BGR     =CV_BGR2RGB,
117 
118     CV_BGRA2RGBA   =5,
119     CV_RGBA2BGRA   =CV_BGRA2RGBA,
120 
121     CV_BGR2GRAY    =6,
122     CV_RGB2GRAY    =7,
123     CV_GRAY2BGR    =8,
124     CV_GRAY2RGB    =CV_GRAY2BGR,
125     CV_GRAY2BGRA   =9,
126     CV_GRAY2RGBA   =CV_GRAY2BGRA,
127     CV_BGRA2GRAY   =10,
128     CV_RGBA2GRAY   =11,
129 
130     CV_BGR2BGR565  =12,
131     CV_RGB2BGR565  =13,
132     CV_BGR5652BGR  =14,
133     CV_BGR5652RGB  =15,
134     CV_BGRA2BGR565 =16,
135     CV_RGBA2BGR565 =17,
136     CV_BGR5652BGRA =18,
137     CV_BGR5652RGBA =19,
138 
139     CV_GRAY2BGR565 =20,
140     CV_BGR5652GRAY =21,
141 
142     CV_BGR2BGR555  =22,
143     CV_RGB2BGR555  =23,
144     CV_BGR5552BGR  =24,
145     CV_BGR5552RGB  =25,
146     CV_BGRA2BGR555 =26,
147     CV_RGBA2BGR555 =27,
148     CV_BGR5552BGRA =28,
149     CV_BGR5552RGBA =29,
150 
151     CV_GRAY2BGR555 =30,
152     CV_BGR5552GRAY =31,
153 
154     CV_BGR2XYZ     =32,
155     CV_RGB2XYZ     =33,
156     CV_XYZ2BGR     =34,
157     CV_XYZ2RGB     =35,
158 
159     CV_BGR2YCrCb   =36,
160     CV_RGB2YCrCb   =37,
161     CV_YCrCb2BGR   =38,
162     CV_YCrCb2RGB   =39,
163 
164     CV_BGR2HSV     =40,
165     CV_RGB2HSV     =41,
166 
167     CV_BGR2Lab     =44,
168     CV_RGB2Lab     =45,
169 
170     CV_BayerBG2BGR =46,
171     CV_BayerGB2BGR =47,
172     CV_BayerRG2BGR =48,
173     CV_BayerGR2BGR =49,
174 
175     CV_BayerBG2RGB =CV_BayerRG2BGR,
176     CV_BayerGB2RGB =CV_BayerGR2BGR,
177     CV_BayerRG2RGB =CV_BayerBG2BGR,
178     CV_BayerGR2RGB =CV_BayerGB2BGR,
179 
180     CV_BGR2Luv     =50,
181     CV_RGB2Luv     =51,
182     CV_BGR2HLS     =52,
183     CV_RGB2HLS     =53,
184 
185     CV_HSV2BGR     =54,
186     CV_HSV2RGB     =55,
187 
188     CV_Lab2BGR     =56,
189     CV_Lab2RGB     =57,
190     CV_Luv2BGR     =58,
191     CV_Luv2RGB     =59,
192     CV_HLS2BGR     =60,
193     CV_HLS2RGB     =61,
194 
195     CV_BayerBG2BGR_VNG =62,
196     CV_BayerGB2BGR_VNG =63,
197     CV_BayerRG2BGR_VNG =64,
198     CV_BayerGR2BGR_VNG =65,
199 
200     CV_BayerBG2RGB_VNG =CV_BayerRG2BGR_VNG,
201     CV_BayerGB2RGB_VNG =CV_BayerGR2BGR_VNG,
202     CV_BayerRG2RGB_VNG =CV_BayerBG2BGR_VNG,
203     CV_BayerGR2RGB_VNG =CV_BayerGB2BGR_VNG,
204 
205     CV_BGR2HSV_FULL = 66,
206     CV_RGB2HSV_FULL = 67,
207     CV_BGR2HLS_FULL = 68,
208     CV_RGB2HLS_FULL = 69,
209 
210     CV_HSV2BGR_FULL = 70,
211     CV_HSV2RGB_FULL = 71,
212     CV_HLS2BGR_FULL = 72,
213     CV_HLS2RGB_FULL = 73,
214 
215     CV_LBGR2Lab     = 74,
216     CV_LRGB2Lab     = 75,
217     CV_LBGR2Luv     = 76,
218     CV_LRGB2Luv     = 77,
219 
220     CV_Lab2LBGR     = 78,
221     CV_Lab2LRGB     = 79,
222     CV_Luv2LBGR     = 80,
223     CV_Luv2LRGB     = 81,
224 
225     CV_BGR2YUV      = 82,
226     CV_RGB2YUV      = 83,
227     CV_YUV2BGR      = 84,
228     CV_YUV2RGB      = 85,
229 
230     CV_BayerBG2GRAY = 86,
231     CV_BayerGB2GRAY = 87,
232     CV_BayerRG2GRAY = 88,
233     CV_BayerGR2GRAY = 89,
234 
235     //YUV 4:2:0 formats family
236     CV_YUV2RGB_NV12 = 90,
237     CV_YUV2BGR_NV12 = 91,
238     CV_YUV2RGB_NV21 = 92,
239     CV_YUV2BGR_NV21 = 93,
240     CV_YUV420sp2RGB = CV_YUV2RGB_NV21,
241     CV_YUV420sp2BGR = CV_YUV2BGR_NV21,
242 
243     CV_YUV2RGBA_NV12 = 94,
244     CV_YUV2BGRA_NV12 = 95,
245     CV_YUV2RGBA_NV21 = 96,
246     CV_YUV2BGRA_NV21 = 97,
247     CV_YUV420sp2RGBA = CV_YUV2RGBA_NV21,
248     CV_YUV420sp2BGRA = CV_YUV2BGRA_NV21,
249 
250     CV_YUV2RGB_YV12 = 98,
251     CV_YUV2BGR_YV12 = 99,
252     CV_YUV2RGB_IYUV = 100,
253     CV_YUV2BGR_IYUV = 101,
254     CV_YUV2RGB_I420 = CV_YUV2RGB_IYUV,
255     CV_YUV2BGR_I420 = CV_YUV2BGR_IYUV,
256     CV_YUV420p2RGB = CV_YUV2RGB_YV12,
257     CV_YUV420p2BGR = CV_YUV2BGR_YV12,
258 
259     CV_YUV2RGBA_YV12 = 102,
260     CV_YUV2BGRA_YV12 = 103,
261     CV_YUV2RGBA_IYUV = 104,
262     CV_YUV2BGRA_IYUV = 105,
263     CV_YUV2RGBA_I420 = CV_YUV2RGBA_IYUV,
264     CV_YUV2BGRA_I420 = CV_YUV2BGRA_IYUV,
265     CV_YUV420p2RGBA = CV_YUV2RGBA_YV12,
266     CV_YUV420p2BGRA = CV_YUV2BGRA_YV12,
267 
268     CV_YUV2GRAY_420 = 106,
269     CV_YUV2GRAY_NV21 = CV_YUV2GRAY_420,
270     CV_YUV2GRAY_NV12 = CV_YUV2GRAY_420,
271     CV_YUV2GRAY_YV12 = CV_YUV2GRAY_420,
272     CV_YUV2GRAY_IYUV = CV_YUV2GRAY_420,
273     CV_YUV2GRAY_I420 = CV_YUV2GRAY_420,
274     CV_YUV420sp2GRAY = CV_YUV2GRAY_420,
275     CV_YUV420p2GRAY = CV_YUV2GRAY_420,
276 
277     //YUV 4:2:2 formats family
278     CV_YUV2RGB_UYVY = 107,
279     CV_YUV2BGR_UYVY = 108,
280     //CV_YUV2RGB_VYUY = 109,
281     //CV_YUV2BGR_VYUY = 110,
282     CV_YUV2RGB_Y422 = CV_YUV2RGB_UYVY,
283     CV_YUV2BGR_Y422 = CV_YUV2BGR_UYVY,
284     CV_YUV2RGB_UYNV = CV_YUV2RGB_UYVY,
285     CV_YUV2BGR_UYNV = CV_YUV2BGR_UYVY,
286 
287     CV_YUV2RGBA_UYVY = 111,
288     CV_YUV2BGRA_UYVY = 112,
289     //CV_YUV2RGBA_VYUY = 113,
290     //CV_YUV2BGRA_VYUY = 114,
291     CV_YUV2RGBA_Y422 = CV_YUV2RGBA_UYVY,
292     CV_YUV2BGRA_Y422 = CV_YUV2BGRA_UYVY,
293     CV_YUV2RGBA_UYNV = CV_YUV2RGBA_UYVY,
294     CV_YUV2BGRA_UYNV = CV_YUV2BGRA_UYVY,
295 
296     CV_YUV2RGB_YUY2 = 115,
297     CV_YUV2BGR_YUY2 = 116,
298     CV_YUV2RGB_YVYU = 117,
299     CV_YUV2BGR_YVYU = 118,
300     CV_YUV2RGB_YUYV = CV_YUV2RGB_YUY2,
301     CV_YUV2BGR_YUYV = CV_YUV2BGR_YUY2,
302     CV_YUV2RGB_YUNV = CV_YUV2RGB_YUY2,
303     CV_YUV2BGR_YUNV = CV_YUV2BGR_YUY2,
304 
305     CV_YUV2RGBA_YUY2 = 119,
306     CV_YUV2BGRA_YUY2 = 120,
307     CV_YUV2RGBA_YVYU = 121,
308     CV_YUV2BGRA_YVYU = 122,
309     CV_YUV2RGBA_YUYV = CV_YUV2RGBA_YUY2,
310     CV_YUV2BGRA_YUYV = CV_YUV2BGRA_YUY2,
311     CV_YUV2RGBA_YUNV = CV_YUV2RGBA_YUY2,
312     CV_YUV2BGRA_YUNV = CV_YUV2BGRA_YUY2,
313 
314     CV_YUV2GRAY_UYVY = 123,
315     CV_YUV2GRAY_YUY2 = 124,
316     //CV_YUV2GRAY_VYUY = CV_YUV2GRAY_UYVY,
317     CV_YUV2GRAY_Y422 = CV_YUV2GRAY_UYVY,
318     CV_YUV2GRAY_UYNV = CV_YUV2GRAY_UYVY,
319     CV_YUV2GRAY_YVYU = CV_YUV2GRAY_YUY2,
320     CV_YUV2GRAY_YUYV = CV_YUV2GRAY_YUY2,
321     CV_YUV2GRAY_YUNV = CV_YUV2GRAY_YUY2,
322 
323     // alpha premultiplication
324     CV_RGBA2mRGBA = 125,
325     CV_mRGBA2RGBA = 126,
326 
327     CV_RGB2YUV_I420 = 127,
328     CV_BGR2YUV_I420 = 128,
329     CV_RGB2YUV_IYUV = CV_RGB2YUV_I420,
330     CV_BGR2YUV_IYUV = CV_BGR2YUV_I420,
331 
332     CV_RGBA2YUV_I420 = 129,
333     CV_BGRA2YUV_I420 = 130,
334     CV_RGBA2YUV_IYUV = CV_RGBA2YUV_I420,
335     CV_BGRA2YUV_IYUV = CV_BGRA2YUV_I420,
336     CV_RGB2YUV_YV12  = 131,
337     CV_BGR2YUV_YV12  = 132,
338     CV_RGBA2YUV_YV12 = 133,
339     CV_BGRA2YUV_YV12 = 134,
340 
341     // Edge-Aware Demosaicing
342     CV_BayerBG2BGR_EA = 135,
343     CV_BayerGB2BGR_EA = 136,
344     CV_BayerRG2BGR_EA = 137,
345     CV_BayerGR2BGR_EA = 138,
346 
347     CV_BayerBG2RGB_EA = CV_BayerRG2BGR_EA,
348     CV_BayerGB2RGB_EA = CV_BayerGR2BGR_EA,
349     CV_BayerRG2RGB_EA = CV_BayerBG2BGR_EA,
350     CV_BayerGR2RGB_EA = CV_BayerGB2BGR_EA,
351 
352     CV_BayerBG2BGRA =139,
353     CV_BayerGB2BGRA =140,
354     CV_BayerRG2BGRA =141,
355     CV_BayerGR2BGRA =142,
356 
357     CV_BayerBG2RGBA =CV_BayerRG2BGRA,
358     CV_BayerGB2RGBA =CV_BayerGR2BGRA,
359     CV_BayerRG2RGBA =CV_BayerBG2BGRA,
360     CV_BayerGR2RGBA =CV_BayerGB2BGRA,
361 
362     CV_COLORCVT_MAX  = 143
363 };
364 
365 
366 /** Sub-pixel interpolation methods */
367 enum
368 {
369     CV_INTER_NN        =0,
370     CV_INTER_LINEAR    =1,
371     CV_INTER_CUBIC     =2,
372     CV_INTER_AREA      =3,
373     CV_INTER_LANCZOS4  =4
374 };
375 
376 /** ... and other image warping flags */
377 enum
378 {
379     CV_WARP_FILL_OUTLIERS =8,
380     CV_WARP_INVERSE_MAP  =16
381 };
382 
383 /** Shapes of a structuring element for morphological operations
384 @see cv::MorphShapes, cv::getStructuringElement
385 */
386 enum MorphShapes_c
387 {
388     CV_SHAPE_RECT      =0,
389     CV_SHAPE_CROSS     =1,
390     CV_SHAPE_ELLIPSE   =2,
391     CV_SHAPE_CUSTOM    =100 //!< custom structuring element
392 };
393 
394 /** Morphological operations */
395 enum
396 {
397     CV_MOP_ERODE        =0,
398     CV_MOP_DILATE       =1,
399     CV_MOP_OPEN         =2,
400     CV_MOP_CLOSE        =3,
401     CV_MOP_GRADIENT     =4,
402     CV_MOP_TOPHAT       =5,
403     CV_MOP_BLACKHAT     =6
404 };
405 
406 /** Spatial and central moments */
407 typedef struct CvMoments
408 {
409     double  m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; /**< spatial moments */
410     double  mu20, mu11, mu02, mu30, mu21, mu12, mu03; /**< central moments */
411     double  inv_sqrt_m00; /**< m00 != 0 ? 1/sqrt(m00) : 0 */
412 
413 #if defined(CV__ENABLE_C_API_CTORS) && defined(__cplusplus)
CvMomentsCvMoments414     CvMoments(){}
CvMomentsCvMoments415     CvMoments(const cv::Moments& m)
416     {
417         m00 = m.m00; m10 = m.m10; m01 = m.m01;
418         m20 = m.m20; m11 = m.m11; m02 = m.m02;
419         m30 = m.m30; m21 = m.m21; m12 = m.m12; m03 = m.m03;
420         mu20 = m.mu20; mu11 = m.mu11; mu02 = m.mu02;
421         mu30 = m.mu30; mu21 = m.mu21; mu12 = m.mu12; mu03 = m.mu03;
422         double am00 = std::abs(m.m00);
423         inv_sqrt_m00 = am00 > DBL_EPSILON ? 1./std::sqrt(am00) : 0;
424     }
MomentsCvMoments425     operator cv::Moments() const
426     {
427         return cv::Moments(m00, m10, m01, m20, m11, m02, m30, m21, m12, m03);
428     }
429 #endif
430 }
431 CvMoments;
432 
433 #ifdef __cplusplus
434 } // extern "C"
435 
cvMoments()436 CV_INLINE CvMoments cvMoments()
437 {
438 #if !defined(CV__ENABLE_C_API_CTORS)
439     CvMoments self = CV_STRUCT_INITIALIZER; return self;
440 #else
441     return CvMoments();
442 #endif
443 }
444 
cvMoments(const cv::Moments & m)445 CV_INLINE CvMoments cvMoments(const cv::Moments& m)
446 {
447 #if !defined(CV__ENABLE_C_API_CTORS)
448     double am00 = std::abs(m.m00);
449     CvMoments self = {
450         m.m00, m.m10, m.m01, m.m20, m.m11, m.m02, m.m30, m.m21, m.m12, m.m03,
451         m.mu20, m.mu11, m.mu02, m.mu30, m.mu21, m.mu12, m.mu03,
452         am00 > DBL_EPSILON ? 1./std::sqrt(am00) : 0
453     };
454     return self;
455 #else
456     return CvMoments(m);
457 #endif
458 }
459 
460 extern "C" {
461 #endif // __cplusplus
462 
463 /** Hu invariants */
464 typedef struct CvHuMoments
465 {
466     double hu1, hu2, hu3, hu4, hu5, hu6, hu7; /**< Hu invariants */
467 }
468 CvHuMoments;
469 
470 /** Template matching methods */
471 enum
472 {
473     CV_TM_SQDIFF        =0,
474     CV_TM_SQDIFF_NORMED =1,
475     CV_TM_CCORR         =2,
476     CV_TM_CCORR_NORMED  =3,
477     CV_TM_CCOEFF        =4,
478     CV_TM_CCOEFF_NORMED =5
479 };
480 
481 typedef float (CV_CDECL * CvDistanceFunction)( const float* a, const float* b, void* user_param );
482 
483 /** Contour retrieval modes */
484 enum
485 {
486     CV_RETR_EXTERNAL=0,
487     CV_RETR_LIST=1,
488     CV_RETR_CCOMP=2,
489     CV_RETR_TREE=3,
490     CV_RETR_FLOODFILL=4
491 };
492 
493 /** Contour approximation methods */
494 enum
495 {
496     CV_CHAIN_CODE=0,
497     CV_CHAIN_APPROX_NONE=1,
498     CV_CHAIN_APPROX_SIMPLE=2,
499     CV_CHAIN_APPROX_TC89_L1=3,
500     CV_CHAIN_APPROX_TC89_KCOS=4,
501     CV_LINK_RUNS=5
502 };
503 
504 /*
505 Internal structure that is used for sequential retrieving contours from the image.
506 It supports both hierarchical and plane variants of Suzuki algorithm.
507 */
508 typedef struct _CvContourScanner* CvContourScanner;
509 
510 /** Freeman chain reader state */
511 typedef struct CvChainPtReader
512 {
513     CV_SEQ_READER_FIELDS()
514     char      code;
515     CvPoint   pt;
516     schar     deltas[8][2];
517 }
518 CvChainPtReader;
519 
520 /** initializes 8-element array for fast access to 3x3 neighborhood of a pixel */
521 #define  CV_INIT_3X3_DELTAS( deltas, step, nch )            \
522     ((deltas)[0] =  (nch),  (deltas)[1] = -(step) + (nch),  \
523      (deltas)[2] = -(step), (deltas)[3] = -(step) - (nch),  \
524      (deltas)[4] = -(nch),  (deltas)[5] =  (step) - (nch),  \
525      (deltas)[6] =  (step), (deltas)[7] =  (step) + (nch))
526 
527 
528 /** Contour approximation algorithms */
529 enum
530 {
531     CV_POLY_APPROX_DP = 0
532 };
533 
534 /** Shape matching methods */
535 enum
536 {
537     CV_CONTOURS_MATCH_I1  =1, //!< \f[I_1(A,B) =  \sum _{i=1...7}  \left |  \frac{1}{m^A_i} -  \frac{1}{m^B_i} \right |\f]
538     CV_CONTOURS_MATCH_I2  =2, //!< \f[I_2(A,B) =  \sum _{i=1...7}  \left | m^A_i - m^B_i  \right |\f]
539     CV_CONTOURS_MATCH_I3  =3  //!< \f[I_3(A,B) =  \max _{i=1...7}  \frac{ \left| m^A_i - m^B_i \right| }{ \left| m^A_i \right| }\f]
540 };
541 
542 /** Shape orientation */
543 enum
544 {
545     CV_CLOCKWISE         =1,
546     CV_COUNTER_CLOCKWISE =2
547 };
548 
549 
550 /** Convexity defect */
551 typedef struct CvConvexityDefect
552 {
553     CvPoint* start; /**< point of the contour where the defect begins */
554     CvPoint* end; /**< point of the contour where the defect ends */
555     CvPoint* depth_point; /**< the farthest from the convex hull point within the defect */
556     float depth; /**< distance between the farthest point and the convex hull */
557 } CvConvexityDefect;
558 
559 
560 /** Histogram comparison methods */
561 enum
562 {
563     CV_COMP_CORREL        =0,
564     CV_COMP_CHISQR        =1,
565     CV_COMP_INTERSECT     =2,
566     CV_COMP_BHATTACHARYYA =3,
567     CV_COMP_HELLINGER     =CV_COMP_BHATTACHARYYA,
568     CV_COMP_CHISQR_ALT    =4,
569     CV_COMP_KL_DIV        =5
570 };
571 
572 /** Mask size for distance transform */
573 enum
574 {
575     CV_DIST_MASK_3   =3,
576     CV_DIST_MASK_5   =5,
577     CV_DIST_MASK_PRECISE =0
578 };
579 
580 /** Content of output label array: connected components or pixels */
581 enum
582 {
583   CV_DIST_LABEL_CCOMP = 0,
584   CV_DIST_LABEL_PIXEL = 1
585 };
586 
587 /** Distance types for Distance Transform and M-estimators */
588 enum
589 {
590     CV_DIST_USER    =-1,  /**< User defined distance */
591     CV_DIST_L1      =1,   /**< distance = |x1-x2| + |y1-y2| */
592     CV_DIST_L2      =2,   /**< the simple euclidean distance */
593     CV_DIST_C       =3,   /**< distance = max(|x1-x2|,|y1-y2|) */
594     CV_DIST_L12     =4,   /**< L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1)) */
595     CV_DIST_FAIR    =5,   /**< distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998 */
596     CV_DIST_WELSCH  =6,   /**< distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846 */
597     CV_DIST_HUBER   =7    /**< distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345 */
598 };
599 
600 
601 /** Threshold types */
602 enum
603 {
604     CV_THRESH_BINARY      =0,  /**< value = value > threshold ? max_value : 0       */
605     CV_THRESH_BINARY_INV  =1,  /**< value = value > threshold ? 0 : max_value       */
606     CV_THRESH_TRUNC       =2,  /**< value = value > threshold ? threshold : value   */
607     CV_THRESH_TOZERO      =3,  /**< value = value > threshold ? value : 0           */
608     CV_THRESH_TOZERO_INV  =4,  /**< value = value > threshold ? 0 : value           */
609     CV_THRESH_MASK        =7,
610     CV_THRESH_OTSU        =8, /**< use Otsu algorithm to choose the optimal threshold value;
611                                  combine the flag with one of the above CV_THRESH_* values */
612     CV_THRESH_TRIANGLE    =16  /**< use Triangle algorithm to choose the optimal threshold value;
613                                  combine the flag with one of the above CV_THRESH_* values, but not
614                                  with CV_THRESH_OTSU */
615 };
616 
617 /** Adaptive threshold methods */
618 enum
619 {
620     CV_ADAPTIVE_THRESH_MEAN_C  =0,
621     CV_ADAPTIVE_THRESH_GAUSSIAN_C  =1
622 };
623 
624 /** FloodFill flags */
625 enum
626 {
627     CV_FLOODFILL_FIXED_RANGE =(1 << 16),
628     CV_FLOODFILL_MASK_ONLY   =(1 << 17)
629 };
630 
631 
632 /** Canny edge detector flags */
633 enum
634 {
635     CV_CANNY_L2_GRADIENT  =(1 << 31)
636 };
637 
638 /** Variants of a Hough transform */
639 enum
640 {
641     CV_HOUGH_STANDARD =0,
642     CV_HOUGH_PROBABILISTIC =1,
643     CV_HOUGH_MULTI_SCALE =2,
644     CV_HOUGH_GRADIENT =3
645 };
646 
647 
648 /* Fast search data structures  */
649 struct CvFeatureTree;
650 struct CvLSH;
651 struct CvLSHOperations;
652 
653 /** @} */
654 
655 #ifdef __cplusplus
656 }
657 #endif
658 
659 #endif
660