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