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