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_IMGPROC_C_H
44 #define OPENCV_IMGPROC_IMGPROC_C_H
45
46 #include "opencv2/imgproc/types_c.h"
47
48 #ifdef __cplusplus
49 extern "C" {
50 #endif
51
52 /** @addtogroup imgproc_c
53 @{
54 */
55
56 /*********************** Background statistics accumulation *****************************/
57
58 /** @brief Adds image to accumulator
59 @see cv::accumulate
60 */
61 CVAPI(void) cvAcc( const CvArr* image, CvArr* sum,
62 const CvArr* mask CV_DEFAULT(NULL) );
63
64 /** @brief Adds squared image to accumulator
65 @see cv::accumulateSquare
66 */
67 CVAPI(void) cvSquareAcc( const CvArr* image, CvArr* sqsum,
68 const CvArr* mask CV_DEFAULT(NULL) );
69
70 /** @brief Adds a product of two images to accumulator
71 @see cv::accumulateProduct
72 */
73 CVAPI(void) cvMultiplyAcc( const CvArr* image1, const CvArr* image2, CvArr* acc,
74 const CvArr* mask CV_DEFAULT(NULL) );
75
76 /** @brief Adds image to accumulator with weights: acc = acc*(1-alpha) + image*alpha
77 @see cv::accumulateWeighted
78 */
79 CVAPI(void) cvRunningAvg( const CvArr* image, CvArr* acc, double alpha,
80 const CvArr* mask CV_DEFAULT(NULL) );
81
82 /****************************************************************************************\
83 * Image Processing *
84 \****************************************************************************************/
85
86 /** Copies source 2D array inside of the larger destination array and
87 makes a border of the specified type (IPL_BORDER_*) around the copied area. */
88 CVAPI(void) cvCopyMakeBorder( const CvArr* src, CvArr* dst, CvPoint offset,
89 int bordertype, CvScalar value CV_DEFAULT(cvScalarAll(0)));
90
91 /** @brief Smooths the image in one of several ways.
92
93 @param src The source image
94 @param dst The destination image
95 @param smoothtype Type of the smoothing, see SmoothMethod_c
96 @param size1 The first parameter of the smoothing operation, the aperture width. Must be a
97 positive odd number (1, 3, 5, ...)
98 @param size2 The second parameter of the smoothing operation, the aperture height. Ignored by
99 CV_MEDIAN and CV_BILATERAL methods. In the case of simple scaled/non-scaled and Gaussian blur if
100 size2 is zero, it is set to size1. Otherwise it must be a positive odd number.
101 @param sigma1 In the case of a Gaussian parameter this parameter may specify Gaussian \f$\sigma\f$
102 (standard deviation). If it is zero, it is calculated from the kernel size:
103 \f[\sigma = 0.3 (n/2 - 1) + 0.8 \quad \text{where} \quad n= \begin{array}{l l} \mbox{\texttt{size1} for horizontal kernel} \\ \mbox{\texttt{size2} for vertical kernel} \end{array}\f]
104 Using standard sigma for small kernels ( \f$3\times 3\f$ to \f$7\times 7\f$ ) gives better speed. If
105 sigma1 is not zero, while size1 and size2 are zeros, the kernel size is calculated from the
106 sigma (to provide accurate enough operation).
107 @param sigma2 additional parameter for bilateral filtering
108
109 @see cv::GaussianBlur, cv::blur, cv::medianBlur, cv::bilateralFilter.
110 */
111 CVAPI(void) cvSmooth( const CvArr* src, CvArr* dst,
112 int smoothtype CV_DEFAULT(CV_GAUSSIAN),
113 int size1 CV_DEFAULT(3),
114 int size2 CV_DEFAULT(0),
115 double sigma1 CV_DEFAULT(0),
116 double sigma2 CV_DEFAULT(0));
117
118 /** @brief Convolves an image with the kernel.
119
120 @param src input image.
121 @param dst output image of the same size and the same number of channels as src.
122 @param kernel convolution kernel (or rather a correlation kernel), a single-channel floating point
123 matrix; if you want to apply different kernels to different channels, split the image into
124 separate color planes using split and process them individually.
125 @param anchor anchor of the kernel that indicates the relative position of a filtered point within
126 the kernel; the anchor should lie within the kernel; default value (-1,-1) means that the anchor
127 is at the kernel center.
128
129 @see cv::filter2D
130 */
131 CVAPI(void) cvFilter2D( const CvArr* src, CvArr* dst, const CvMat* kernel,
132 CvPoint anchor CV_DEFAULT(cvPoint(-1,-1)));
133
134 /** @brief Finds integral image: SUM(X,Y) = sum(x<X,y<Y)I(x,y)
135 @see cv::integral
136 */
137 CVAPI(void) cvIntegral( const CvArr* image, CvArr* sum,
138 CvArr* sqsum CV_DEFAULT(NULL),
139 CvArr* tilted_sum CV_DEFAULT(NULL));
140
141 /** @brief Smoothes the input image with gaussian kernel and then down-samples it.
142
143 dst_width = floor(src_width/2)[+1],
144 dst_height = floor(src_height/2)[+1]
145 @see cv::pyrDown
146 */
147 CVAPI(void) cvPyrDown( const CvArr* src, CvArr* dst,
148 int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );
149
150 /** @brief Up-samples image and smoothes the result with gaussian kernel.
151
152 dst_width = src_width*2,
153 dst_height = src_height*2
154 @see cv::pyrUp
155 */
156 CVAPI(void) cvPyrUp( const CvArr* src, CvArr* dst,
157 int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );
158
159 /** @brief Builds pyramid for an image
160 @see buildPyramid
161 */
162 CVAPI(CvMat**) cvCreatePyramid( const CvArr* img, int extra_layers, double rate,
163 const CvSize* layer_sizes CV_DEFAULT(0),
164 CvArr* bufarr CV_DEFAULT(0),
165 int calc CV_DEFAULT(1),
166 int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );
167
168 /** @brief Releases pyramid */
169 CVAPI(void) cvReleasePyramid( CvMat*** pyramid, int extra_layers );
170
171
172 /** @brief Filters image using meanshift algorithm
173 @see cv::pyrMeanShiftFiltering
174 */
175 CVAPI(void) cvPyrMeanShiftFiltering( const CvArr* src, CvArr* dst,
176 double sp, double sr, int max_level CV_DEFAULT(1),
177 CvTermCriteria termcrit CV_DEFAULT(cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,5,1)));
178
179 /** @brief Segments image using seed "markers"
180 @see cv::watershed
181 */
182 CVAPI(void) cvWatershed( const CvArr* image, CvArr* markers );
183
184 /** @brief Calculates an image derivative using generalized Sobel
185
186 (aperture_size = 1,3,5,7) or Scharr (aperture_size = -1) operator.
187 Scharr can be used only for the first dx or dy derivative
188 @see cv::Sobel
189 */
190 CVAPI(void) cvSobel( const CvArr* src, CvArr* dst,
191 int xorder, int yorder,
192 int aperture_size CV_DEFAULT(3));
193
194 /** @brief Calculates the image Laplacian: (d2/dx + d2/dy)I
195 @see cv::Laplacian
196 */
197 CVAPI(void) cvLaplace( const CvArr* src, CvArr* dst,
198 int aperture_size CV_DEFAULT(3) );
199
200 /** @brief Converts input array pixels from one color space to another
201 @see cv::cvtColor
202 */
203 CVAPI(void) cvCvtColor( const CvArr* src, CvArr* dst, int code );
204
205
206 /** @brief Resizes image (input array is resized to fit the destination array)
207 @see cv::resize
208 */
209 CVAPI(void) cvResize( const CvArr* src, CvArr* dst,
210 int interpolation CV_DEFAULT( CV_INTER_LINEAR ));
211
212 /** @brief Warps image with affine transform
213 @note ::cvGetQuadrangleSubPix is similar to ::cvWarpAffine, but the outliers are extrapolated using
214 replication border mode.
215 @see cv::warpAffine
216 */
217 CVAPI(void) cvWarpAffine( const CvArr* src, CvArr* dst, const CvMat* map_matrix,
218 int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),
219 CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );
220
221 /** @brief Computes affine transform matrix for mapping src[i] to dst[i] (i=0,1,2)
222 @see cv::getAffineTransform
223 */
224 CVAPI(CvMat*) cvGetAffineTransform( const CvPoint2D32f * src,
225 const CvPoint2D32f * dst,
226 CvMat * map_matrix );
227
228 /** @brief Computes rotation_matrix matrix
229 @see cv::getRotationMatrix2D
230 */
231 CVAPI(CvMat*) cv2DRotationMatrix( CvPoint2D32f center, double angle,
232 double scale, CvMat* map_matrix );
233
234 /** @brief Warps image with perspective (projective) transform
235 @see cv::warpPerspective
236 */
237 CVAPI(void) cvWarpPerspective( const CvArr* src, CvArr* dst, const CvMat* map_matrix,
238 int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),
239 CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );
240
241 /** @brief Computes perspective transform matrix for mapping src[i] to dst[i] (i=0,1,2,3)
242 @see cv::getPerspectiveTransform
243 */
244 CVAPI(CvMat*) cvGetPerspectiveTransform( const CvPoint2D32f* src,
245 const CvPoint2D32f* dst,
246 CvMat* map_matrix );
247
248 /** @brief Performs generic geometric transformation using the specified coordinate maps
249 @see cv::remap
250 */
251 CVAPI(void) cvRemap( const CvArr* src, CvArr* dst,
252 const CvArr* mapx, const CvArr* mapy,
253 int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),
254 CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );
255
256 /** @brief Converts mapx & mapy from floating-point to integer formats for cvRemap
257 @see cv::convertMaps
258 */
259 CVAPI(void) cvConvertMaps( const CvArr* mapx, const CvArr* mapy,
260 CvArr* mapxy, CvArr* mapalpha );
261
262 /** @brief Performs forward or inverse log-polar image transform
263 @see cv::warpPolar
264 */
265 CVAPI(void) cvLogPolar( const CvArr* src, CvArr* dst,
266 CvPoint2D32f center, double M,
267 int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS));
268
269 /** Performs forward or inverse linear-polar image transform
270 @see cv::warpPolar
271 */
272 CVAPI(void) cvLinearPolar( const CvArr* src, CvArr* dst,
273 CvPoint2D32f center, double maxRadius,
274 int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS));
275
276 /** @brief Returns a structuring element of the specified size and shape for morphological operations.
277
278 @note the created structuring element IplConvKernel\* element must be released in the end using
279 `cvReleaseStructuringElement(&element)`.
280
281 @param cols Width of the structuring element
282 @param rows Height of the structuring element
283 @param anchor_x x-coordinate of the anchor
284 @param anchor_y y-coordinate of the anchor
285 @param shape element shape that could be one of the cv::MorphShapes_c
286 @param values integer array of cols*rows elements that specifies the custom shape of the
287 structuring element, when shape=CV_SHAPE_CUSTOM.
288
289 @see cv::getStructuringElement
290 */
291 CVAPI(IplConvKernel*) cvCreateStructuringElementEx(
292 int cols, int rows, int anchor_x, int anchor_y,
293 int shape, int* values CV_DEFAULT(NULL) );
294
295 /** @brief releases structuring element
296 @see cvCreateStructuringElementEx
297 */
298 CVAPI(void) cvReleaseStructuringElement( IplConvKernel** element );
299
300 /** @brief erodes input image (applies minimum filter) one or more times.
301 If element pointer is NULL, 3x3 rectangular element is used
302 @see cv::erode
303 */
304 CVAPI(void) cvErode( const CvArr* src, CvArr* dst,
305 IplConvKernel* element CV_DEFAULT(NULL),
306 int iterations CV_DEFAULT(1) );
307
308 /** @brief dilates input image (applies maximum filter) one or more times.
309
310 If element pointer is NULL, 3x3 rectangular element is used
311 @see cv::dilate
312 */
313 CVAPI(void) cvDilate( const CvArr* src, CvArr* dst,
314 IplConvKernel* element CV_DEFAULT(NULL),
315 int iterations CV_DEFAULT(1) );
316
317 /** @brief Performs complex morphological transformation
318 @see cv::morphologyEx
319 */
320 CVAPI(void) cvMorphologyEx( const CvArr* src, CvArr* dst,
321 CvArr* temp, IplConvKernel* element,
322 int operation, int iterations CV_DEFAULT(1) );
323
324 /** @brief Calculates all spatial and central moments up to the 3rd order
325 @see cv::moments
326 */
327 CVAPI(void) cvMoments( const CvArr* arr, CvMoments* moments, int binary CV_DEFAULT(0));
328
329 /** @brief Retrieve spatial moments */
330 CVAPI(double) cvGetSpatialMoment( CvMoments* moments, int x_order, int y_order );
331 /** @brief Retrieve central moments */
332 CVAPI(double) cvGetCentralMoment( CvMoments* moments, int x_order, int y_order );
333 /** @brief Retrieve normalized central moments */
334 CVAPI(double) cvGetNormalizedCentralMoment( CvMoments* moments,
335 int x_order, int y_order );
336
337 /** @brief Calculates 7 Hu's invariants from precalculated spatial and central moments
338 @see cv::HuMoments
339 */
340 CVAPI(void) cvGetHuMoments( CvMoments* moments, CvHuMoments* hu_moments );
341
342 /*********************************** data sampling **************************************/
343
344 /** @brief Fetches pixels that belong to the specified line segment and stores them to the buffer.
345
346 Returns the number of retrieved points.
347 @see cv::LineSegmentDetector
348 */
349 CVAPI(int) cvSampleLine( const CvArr* image, CvPoint pt1, CvPoint pt2, void* buffer,
350 int connectivity CV_DEFAULT(8));
351
352 /** @brief Retrieves the rectangular image region with specified center from the input array.
353
354 dst(x,y) <- src(x + center.x - dst_width/2, y + center.y - dst_height/2).
355 Values of pixels with fractional coordinates are retrieved using bilinear interpolation
356 @see cv::getRectSubPix
357 */
358 CVAPI(void) cvGetRectSubPix( const CvArr* src, CvArr* dst, CvPoint2D32f center );
359
360
361 /** @brief Retrieves quadrangle from the input array.
362
363 matrixarr = ( a11 a12 | b1 ) dst(x,y) <- src(A[x y]' + b)
364 ( a21 a22 | b2 ) (bilinear interpolation is used to retrieve pixels
365 with fractional coordinates)
366 @see cvWarpAffine
367 */
368 CVAPI(void) cvGetQuadrangleSubPix( const CvArr* src, CvArr* dst,
369 const CvMat* map_matrix );
370
371 /** @brief Measures similarity between template and overlapped windows in the source image
372 and fills the resultant image with the measurements
373 @see cv::matchTemplate
374 */
375 CVAPI(void) cvMatchTemplate( const CvArr* image, const CvArr* templ,
376 CvArr* result, int method );
377
378 /** @brief Computes earth mover distance between
379 two weighted point sets (called signatures)
380 @see cv::EMD
381 */
382 CVAPI(float) cvCalcEMD2( const CvArr* signature1,
383 const CvArr* signature2,
384 int distance_type,
385 CvDistanceFunction distance_func CV_DEFAULT(NULL),
386 const CvArr* cost_matrix CV_DEFAULT(NULL),
387 CvArr* flow CV_DEFAULT(NULL),
388 float* lower_bound CV_DEFAULT(NULL),
389 void* userdata CV_DEFAULT(NULL));
390
391 /****************************************************************************************\
392 * Contours retrieving *
393 \****************************************************************************************/
394
395 /** @brief Retrieves outer and optionally inner boundaries of white (non-zero) connected
396 components in the black (zero) background
397 @see cv::findContours, cvStartFindContours, cvFindNextContour, cvSubstituteContour, cvEndFindContours
398 */
399 CVAPI(int) cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour,
400 int header_size CV_DEFAULT(sizeof(CvContour)),
401 int mode CV_DEFAULT(CV_RETR_LIST),
402 int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),
403 CvPoint offset CV_DEFAULT(cvPoint(0,0)));
404
405 /** @brief Initializes contour retrieving process.
406
407 Calls cvStartFindContours.
408 Calls cvFindNextContour until null pointer is returned
409 or some other condition becomes true.
410 Calls cvEndFindContours at the end.
411 @see cvFindContours
412 */
413 CVAPI(CvContourScanner) cvStartFindContours( CvArr* image, CvMemStorage* storage,
414 int header_size CV_DEFAULT(sizeof(CvContour)),
415 int mode CV_DEFAULT(CV_RETR_LIST),
416 int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),
417 CvPoint offset CV_DEFAULT(cvPoint(0,0)));
418
419 /** @brief Retrieves next contour
420 @see cvFindContours
421 */
422 CVAPI(CvSeq*) cvFindNextContour( CvContourScanner scanner );
423
424
425 /** @brief Substitutes the last retrieved contour with the new one
426
427 (if the substitutor is null, the last retrieved contour is removed from the tree)
428 @see cvFindContours
429 */
430 CVAPI(void) cvSubstituteContour( CvContourScanner scanner, CvSeq* new_contour );
431
432
433 /** @brief Releases contour scanner and returns pointer to the first outer contour
434 @see cvFindContours
435 */
436 CVAPI(CvSeq*) cvEndFindContours( CvContourScanner* scanner );
437
438 /** @brief Approximates Freeman chain(s) with a polygonal curve.
439
440 This is a standalone contour approximation routine, not represented in the new interface. When
441 cvFindContours retrieves contours as Freeman chains, it calls the function to get approximated
442 contours, represented as polygons.
443
444 @param src_seq Pointer to the approximated Freeman chain that can refer to other chains.
445 @param storage Storage location for the resulting polylines.
446 @param method Approximation method (see the description of the function :ocvFindContours ).
447 @param parameter Method parameter (not used now).
448 @param minimal_perimeter Approximates only those contours whose perimeters are not less than
449 minimal_perimeter . Other chains are removed from the resulting structure.
450 @param recursive Recursion flag. If it is non-zero, the function approximates all chains that can
451 be obtained from chain by using the h_next or v_next links. Otherwise, the single input chain is
452 approximated.
453 @see cvStartReadChainPoints, cvReadChainPoint
454 */
455 CVAPI(CvSeq*) cvApproxChains( CvSeq* src_seq, CvMemStorage* storage,
456 int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),
457 double parameter CV_DEFAULT(0),
458 int minimal_perimeter CV_DEFAULT(0),
459 int recursive CV_DEFAULT(0));
460
461 /** @brief Initializes Freeman chain reader.
462
463 The reader is used to iteratively get coordinates of all the chain points.
464 If the Freeman codes should be read as is, a simple sequence reader should be used
465 @see cvApproxChains
466 */
467 CVAPI(void) cvStartReadChainPoints( CvChain* chain, CvChainPtReader* reader );
468
469 /** @brief Retrieves the next chain point
470 @see cvApproxChains
471 */
472 CVAPI(CvPoint) cvReadChainPoint( CvChainPtReader* reader );
473
474
475 /****************************************************************************************\
476 * Contour Processing and Shape Analysis *
477 \****************************************************************************************/
478
479 /** @brief Approximates a single polygonal curve (contour) or
480 a tree of polygonal curves (contours)
481 @see cv::approxPolyDP
482 */
483 CVAPI(CvSeq*) cvApproxPoly( const void* src_seq,
484 int header_size, CvMemStorage* storage,
485 int method, double eps,
486 int recursive CV_DEFAULT(0));
487
488 /** @brief Calculates perimeter of a contour or length of a part of contour
489 @see cv::arcLength
490 */
491 CVAPI(double) cvArcLength( const void* curve,
492 CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ),
493 int is_closed CV_DEFAULT(-1));
494
495 /** same as cvArcLength for closed contour
496 */
cvContourPerimeter(const void * contour)497 CV_INLINE double cvContourPerimeter( const void* contour )
498 {
499 return cvArcLength( contour, CV_WHOLE_SEQ, 1 );
500 }
501
502
503 /** @brief Calculates contour bounding rectangle (update=1) or
504 just retrieves pre-calculated rectangle (update=0)
505 @see cv::boundingRect
506 */
507 CVAPI(CvRect) cvBoundingRect( CvArr* points, int update CV_DEFAULT(0) );
508
509 /** @brief Calculates area of a contour or contour segment
510 @see cv::contourArea
511 */
512 CVAPI(double) cvContourArea( const CvArr* contour,
513 CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ),
514 int oriented CV_DEFAULT(0));
515
516 /** @brief Finds minimum area rotated rectangle bounding a set of points
517 @see cv::minAreaRect
518 */
519 CVAPI(CvBox2D) cvMinAreaRect2( const CvArr* points,
520 CvMemStorage* storage CV_DEFAULT(NULL));
521
522 /** @brief Finds minimum enclosing circle for a set of points
523 @see cv::minEnclosingCircle
524 */
525 CVAPI(int) cvMinEnclosingCircle( const CvArr* points,
526 CvPoint2D32f* center, float* radius );
527
528 /** @brief Compares two contours by matching their moments
529 @see cv::matchShapes
530 */
531 CVAPI(double) cvMatchShapes( const void* object1, const void* object2,
532 int method, double parameter CV_DEFAULT(0));
533
534 /** @brief Calculates exact convex hull of 2d point set
535 @see cv::convexHull
536 */
537 CVAPI(CvSeq*) cvConvexHull2( const CvArr* input,
538 void* hull_storage CV_DEFAULT(NULL),
539 int orientation CV_DEFAULT(CV_CLOCKWISE),
540 int return_points CV_DEFAULT(0));
541
542 /** @brief Checks whether the contour is convex or not (returns 1 if convex, 0 if not)
543 @see cv::isContourConvex
544 */
545 CVAPI(int) cvCheckContourConvexity( const CvArr* contour );
546
547
548 /** @brief Finds convexity defects for the contour
549 @see cv::convexityDefects
550 */
551 CVAPI(CvSeq*) cvConvexityDefects( const CvArr* contour, const CvArr* convexhull,
552 CvMemStorage* storage CV_DEFAULT(NULL));
553
554 /** @brief Fits ellipse into a set of 2d points
555 @see cv::fitEllipse
556 */
557 CVAPI(CvBox2D) cvFitEllipse2( const CvArr* points );
558
559 /** @brief Finds minimum rectangle containing two given rectangles */
560 CVAPI(CvRect) cvMaxRect( const CvRect* rect1, const CvRect* rect2 );
561
562 /** @brief Finds coordinates of the box vertices */
563 CVAPI(void) cvBoxPoints( CvBox2D box, CvPoint2D32f pt[4] );
564
565 /** @brief Initializes sequence header for a matrix (column or row vector) of points
566
567 a wrapper for cvMakeSeqHeaderForArray (it does not initialize bounding rectangle!!!) */
568 CVAPI(CvSeq*) cvPointSeqFromMat( int seq_kind, const CvArr* mat,
569 CvContour* contour_header,
570 CvSeqBlock* block );
571
572 /** @brief Checks whether the point is inside polygon, outside, on an edge (at a vertex).
573
574 Returns positive, negative or zero value, correspondingly.
575 Optionally, measures a signed distance between
576 the point and the nearest polygon edge (measure_dist=1)
577 @see cv::pointPolygonTest
578 */
579 CVAPI(double) cvPointPolygonTest( const CvArr* contour,
580 CvPoint2D32f pt, int measure_dist );
581
582 /****************************************************************************************\
583 * Histogram functions *
584 \****************************************************************************************/
585
586 /** @brief Creates a histogram.
587
588 The function creates a histogram of the specified size and returns a pointer to the created
589 histogram. If the array ranges is 0, the histogram bin ranges must be specified later via the
590 function cvSetHistBinRanges. Though cvCalcHist and cvCalcBackProject may process 8-bit images
591 without setting bin ranges, they assume they are equally spaced in 0 to 255 bins.
592
593 @param dims Number of histogram dimensions.
594 @param sizes Array of the histogram dimension sizes.
595 @param type Histogram representation format. CV_HIST_ARRAY means that the histogram data is
596 represented as a multi-dimensional dense array CvMatND. CV_HIST_SPARSE means that histogram data
597 is represented as a multi-dimensional sparse array CvSparseMat.
598 @param ranges Array of ranges for the histogram bins. Its meaning depends on the uniform parameter
599 value. The ranges are used when the histogram is calculated or backprojected to determine which
600 histogram bin corresponds to which value/tuple of values from the input image(s).
601 @param uniform Uniformity flag. If not zero, the histogram has evenly spaced bins and for every
602 \f$0<=i<cDims\f$ ranges[i] is an array of two numbers: lower and upper boundaries for the i-th
603 histogram dimension. The whole range [lower,upper] is then split into dims[i] equal parts to
604 determine the i-th input tuple value ranges for every histogram bin. And if uniform=0 , then the
605 i-th element of the ranges array contains dims[i]+1 elements: \f$\texttt{lower}_0,
606 \texttt{upper}_0, \texttt{lower}_1, \texttt{upper}_1 = \texttt{lower}_2,
607 ...
608 \texttt{upper}_{dims[i]-1}\f$ where \f$\texttt{lower}_j\f$ and \f$\texttt{upper}_j\f$ are lower
609 and upper boundaries of the i-th input tuple value for the j-th bin, respectively. In either
610 case, the input values that are beyond the specified range for a histogram bin are not counted
611 by cvCalcHist and filled with 0 by cvCalcBackProject.
612 */
613 CVAPI(CvHistogram*) cvCreateHist( int dims, int* sizes, int type,
614 float** ranges CV_DEFAULT(NULL),
615 int uniform CV_DEFAULT(1));
616
617 /** @brief Sets the bounds of the histogram bins.
618
619 This is a standalone function for setting bin ranges in the histogram. For a more detailed
620 description of the parameters ranges and uniform, see the :ocvCalcHist function that can initialize
621 the ranges as well. Ranges for the histogram bins must be set before the histogram is calculated or
622 the backproject of the histogram is calculated.
623
624 @param hist Histogram.
625 @param ranges Array of bin ranges arrays. See :ocvCreateHist for details.
626 @param uniform Uniformity flag. See :ocvCreateHist for details.
627 */
628 CVAPI(void) cvSetHistBinRanges( CvHistogram* hist, float** ranges,
629 int uniform CV_DEFAULT(1));
630
631 /** @brief Makes a histogram out of an array.
632
633 The function initializes the histogram, whose header and bins are allocated by the user.
634 cvReleaseHist does not need to be called afterwards. Only dense histograms can be initialized this
635 way. The function returns hist.
636
637 @param dims Number of the histogram dimensions.
638 @param sizes Array of the histogram dimension sizes.
639 @param hist Histogram header initialized by the function.
640 @param data Array used to store histogram bins.
641 @param ranges Histogram bin ranges. See cvCreateHist for details.
642 @param uniform Uniformity flag. See cvCreateHist for details.
643 */
644 CVAPI(CvHistogram*) cvMakeHistHeaderForArray(
645 int dims, int* sizes, CvHistogram* hist,
646 float* data, float** ranges CV_DEFAULT(NULL),
647 int uniform CV_DEFAULT(1));
648
649 /** @brief Releases the histogram.
650
651 The function releases the histogram (header and the data). The pointer to the histogram is cleared
652 by the function. If \*hist pointer is already NULL, the function does nothing.
653
654 @param hist Double pointer to the released histogram.
655 */
656 CVAPI(void) cvReleaseHist( CvHistogram** hist );
657
658 /** @brief Clears the histogram.
659
660 The function sets all of the histogram bins to 0 in case of a dense histogram and removes all
661 histogram bins in case of a sparse array.
662
663 @param hist Histogram.
664 */
665 CVAPI(void) cvClearHist( CvHistogram* hist );
666
667 /** @brief Finds the minimum and maximum histogram bins.
668
669 The function finds the minimum and maximum histogram bins and their positions. All of output
670 arguments are optional. Among several extremas with the same value the ones with the minimum index
671 (in the lexicographical order) are returned. In case of several maximums or minimums, the earliest
672 in the lexicographical order (extrema locations) is returned.
673
674 @param hist Histogram.
675 @param min_value Pointer to the minimum value of the histogram.
676 @param max_value Pointer to the maximum value of the histogram.
677 @param min_idx Pointer to the array of coordinates for the minimum.
678 @param max_idx Pointer to the array of coordinates for the maximum.
679 */
680 CVAPI(void) cvGetMinMaxHistValue( const CvHistogram* hist,
681 float* min_value, float* max_value,
682 int* min_idx CV_DEFAULT(NULL),
683 int* max_idx CV_DEFAULT(NULL));
684
685
686 /** @brief Normalizes the histogram.
687
688 The function normalizes the histogram bins by scaling them so that the sum of the bins becomes equal
689 to factor.
690
691 @param hist Pointer to the histogram.
692 @param factor Normalization factor.
693 */
694 CVAPI(void) cvNormalizeHist( CvHistogram* hist, double factor );
695
696
697 /** @brief Thresholds the histogram.
698
699 The function clears histogram bins that are below the specified threshold.
700
701 @param hist Pointer to the histogram.
702 @param threshold Threshold level.
703 */
704 CVAPI(void) cvThreshHist( CvHistogram* hist, double threshold );
705
706
707 /** Compares two histogram */
708 CVAPI(double) cvCompareHist( const CvHistogram* hist1,
709 const CvHistogram* hist2,
710 int method);
711
712 /** @brief Copies a histogram.
713
714 The function makes a copy of the histogram. If the second histogram pointer \*dst is NULL, a new
715 histogram of the same size as src is created. Otherwise, both histograms must have equal types and
716 sizes. Then the function copies the bin values of the source histogram to the destination histogram
717 and sets the same bin value ranges as in src.
718
719 @param src Source histogram.
720 @param dst Pointer to the destination histogram.
721 */
722 CVAPI(void) cvCopyHist( const CvHistogram* src, CvHistogram** dst );
723
724
725 /** @brief Calculates bayesian probabilistic histograms
726 (each or src and dst is an array of _number_ histograms */
727 CVAPI(void) cvCalcBayesianProb( CvHistogram** src, int number,
728 CvHistogram** dst);
729
730 /** @brief Calculates array histogram
731 @see cv::calcHist
732 */
733 CVAPI(void) cvCalcArrHist( CvArr** arr, CvHistogram* hist,
734 int accumulate CV_DEFAULT(0),
735 const CvArr* mask CV_DEFAULT(NULL) );
736
737 /** @overload */
738 CV_INLINE void cvCalcHist( IplImage** image, CvHistogram* hist,
739 int accumulate CV_DEFAULT(0),
740 const CvArr* mask CV_DEFAULT(NULL) )
741 {
742 cvCalcArrHist( (CvArr**)image, hist, accumulate, mask );
743 }
744
745 /** @brief Calculates back project
746 @see cvCalcBackProject, cv::calcBackProject
747 */
748 CVAPI(void) cvCalcArrBackProject( CvArr** image, CvArr* dst,
749 const CvHistogram* hist );
750
751 #define cvCalcBackProject(image, dst, hist) cvCalcArrBackProject((CvArr**)image, dst, hist)
752
753
754 /** @brief Locates a template within an image by using a histogram comparison.
755
756 The function calculates the back projection by comparing histograms of the source image patches with
757 the given histogram. The function is similar to matchTemplate, but instead of comparing the raster
758 patch with all its possible positions within the search window, the function CalcBackProjectPatch
759 compares histograms. See the algorithm diagram below:
760
761 ![image](pics/backprojectpatch.png)
762
763 @param image Source images (though, you may pass CvMat\*\* as well).
764 @param dst Destination image.
765 @param range
766 @param hist Histogram.
767 @param method Comparison method passed to cvCompareHist (see the function description).
768 @param factor Normalization factor for histograms that affects the normalization scale of the
769 destination image. Pass 1 if not sure.
770
771 @see cvCalcBackProjectPatch
772 */
773 CVAPI(void) cvCalcArrBackProjectPatch( CvArr** image, CvArr* dst, CvSize range,
774 CvHistogram* hist, int method,
775 double factor );
776
777 #define cvCalcBackProjectPatch( image, dst, range, hist, method, factor ) \
778 cvCalcArrBackProjectPatch( (CvArr**)image, dst, range, hist, method, factor )
779
780
781 /** @brief Divides one histogram by another.
782
783 The function calculates the object probability density from two histograms as:
784
785 \f[\texttt{disthist} (I)= \forkthree{0}{if \(\texttt{hist1}(I)=0\)}{\texttt{scale}}{if \(\texttt{hist1}(I) \ne 0\) and \(\texttt{hist2}(I) > \texttt{hist1}(I)\)}{\frac{\texttt{hist2}(I) \cdot \texttt{scale}}{\texttt{hist1}(I)}}{if \(\texttt{hist1}(I) \ne 0\) and \(\texttt{hist2}(I) \le \texttt{hist1}(I)\)}\f]
786
787 @param hist1 First histogram (the divisor).
788 @param hist2 Second histogram.
789 @param dst_hist Destination histogram.
790 @param scale Scale factor for the destination histogram.
791 */
792 CVAPI(void) cvCalcProbDensity( const CvHistogram* hist1, const CvHistogram* hist2,
793 CvHistogram* dst_hist, double scale CV_DEFAULT(255) );
794
795 /** @brief equalizes histogram of 8-bit single-channel image
796 @see cv::equalizeHist
797 */
798 CVAPI(void) cvEqualizeHist( const CvArr* src, CvArr* dst );
799
800
801 /** @brief Applies distance transform to binary image
802 @see cv::distanceTransform
803 */
804 CVAPI(void) cvDistTransform( const CvArr* src, CvArr* dst,
805 int distance_type CV_DEFAULT(CV_DIST_L2),
806 int mask_size CV_DEFAULT(3),
807 const float* mask CV_DEFAULT(NULL),
808 CvArr* labels CV_DEFAULT(NULL),
809 int labelType CV_DEFAULT(CV_DIST_LABEL_CCOMP));
810
811
812 /** @brief Applies fixed-level threshold to grayscale image.
813
814 This is a basic operation applied before retrieving contours
815 @see cv::threshold
816 */
817 CVAPI(double) cvThreshold( const CvArr* src, CvArr* dst,
818 double threshold, double max_value,
819 int threshold_type );
820
821 /** @brief Applies adaptive threshold to grayscale image.
822
823 The two parameters for methods CV_ADAPTIVE_THRESH_MEAN_C and
824 CV_ADAPTIVE_THRESH_GAUSSIAN_C are:
825 neighborhood size (3, 5, 7 etc.),
826 and a constant subtracted from mean (...,-3,-2,-1,0,1,2,3,...)
827 @see cv::adaptiveThreshold
828 */
829 CVAPI(void) cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value,
830 int adaptive_method CV_DEFAULT(CV_ADAPTIVE_THRESH_MEAN_C),
831 int threshold_type CV_DEFAULT(CV_THRESH_BINARY),
832 int block_size CV_DEFAULT(3),
833 double param1 CV_DEFAULT(5));
834
835 /** @brief Fills the connected component until the color difference gets large enough
836 @see cv::floodFill
837 */
838 CVAPI(void) cvFloodFill( CvArr* image, CvPoint seed_point,
839 CvScalar new_val, CvScalar lo_diff CV_DEFAULT(cvScalarAll(0)),
840 CvScalar up_diff CV_DEFAULT(cvScalarAll(0)),
841 CvConnectedComp* comp CV_DEFAULT(NULL),
842 int flags CV_DEFAULT(4),
843 CvArr* mask CV_DEFAULT(NULL));
844
845 /****************************************************************************************\
846 * Feature detection *
847 \****************************************************************************************/
848
849 /** @brief Runs canny edge detector
850 @see cv::Canny
851 */
852 CVAPI(void) cvCanny( const CvArr* image, CvArr* edges, double threshold1,
853 double threshold2, int aperture_size CV_DEFAULT(3) );
854
855 /** @brief Calculates constraint image for corner detection
856
857 Dx^2 * Dyy + Dxx * Dy^2 - 2 * Dx * Dy * Dxy.
858 Applying threshold to the result gives coordinates of corners
859 @see cv::preCornerDetect
860 */
861 CVAPI(void) cvPreCornerDetect( const CvArr* image, CvArr* corners,
862 int aperture_size CV_DEFAULT(3) );
863
864 /** @brief Calculates eigen values and vectors of 2x2
865 gradient covariation matrix at every image pixel
866 @see cv::cornerEigenValsAndVecs
867 */
868 CVAPI(void) cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv,
869 int block_size, int aperture_size CV_DEFAULT(3) );
870
871 /** @brief Calculates minimal eigenvalue for 2x2 gradient covariation matrix at
872 every image pixel
873 @see cv::cornerMinEigenVal
874 */
875 CVAPI(void) cvCornerMinEigenVal( const CvArr* image, CvArr* eigenval,
876 int block_size, int aperture_size CV_DEFAULT(3) );
877
878 /** @brief Harris corner detector:
879
880 Calculates det(M) - k*(trace(M)^2), where M is 2x2 gradient covariation matrix for each pixel
881 @see cv::cornerHarris
882 */
883 CVAPI(void) cvCornerHarris( const CvArr* image, CvArr* harris_response,
884 int block_size, int aperture_size CV_DEFAULT(3),
885 double k CV_DEFAULT(0.04) );
886
887 /** @brief Adjust corner position using some sort of gradient search
888 @see cv::cornerSubPix
889 */
890 CVAPI(void) cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners,
891 int count, CvSize win, CvSize zero_zone,
892 CvTermCriteria criteria );
893
894 /** @brief Finds a sparse set of points within the selected region
895 that seem to be easy to track
896 @see cv::goodFeaturesToTrack
897 */
898 CVAPI(void) cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image,
899 CvArr* temp_image, CvPoint2D32f* corners,
900 int* corner_count, double quality_level,
901 double min_distance,
902 const CvArr* mask CV_DEFAULT(NULL),
903 int block_size CV_DEFAULT(3),
904 int use_harris CV_DEFAULT(0),
905 double k CV_DEFAULT(0.04) );
906
907 /** @brief Finds lines on binary image using one of several methods.
908
909 line_storage is either memory storage or 1 x _max number of lines_ CvMat, its
910 number of columns is changed by the function.
911 method is one of CV_HOUGH_*;
912 rho, theta and threshold are used for each of those methods;
913 param1 ~ line length, param2 ~ line gap - for probabilistic,
914 param1 ~ srn, param2 ~ stn - for multi-scale
915 @see cv::HoughLines
916 */
917 CVAPI(CvSeq*) cvHoughLines2( CvArr* image, void* line_storage, int method,
918 double rho, double theta, int threshold,
919 double param1 CV_DEFAULT(0), double param2 CV_DEFAULT(0),
920 double min_theta CV_DEFAULT(0), double max_theta CV_DEFAULT(CV_PI));
921
922 /** @brief Finds circles in the image
923 @see cv::HoughCircles
924 */
925 CVAPI(CvSeq*) cvHoughCircles( CvArr* image, void* circle_storage,
926 int method, double dp, double min_dist,
927 double param1 CV_DEFAULT(100),
928 double param2 CV_DEFAULT(100),
929 int min_radius CV_DEFAULT(0),
930 int max_radius CV_DEFAULT(0));
931
932 /** @brief Fits a line into set of 2d or 3d points in a robust way (M-estimator technique)
933 @see cv::fitLine
934 */
935 CVAPI(void) cvFitLine( const CvArr* points, int dist_type, double param,
936 double reps, double aeps, float* line );
937
938 /****************************************************************************************\
939 * Drawing *
940 \****************************************************************************************/
941
942 /****************************************************************************************\
943 * Drawing functions work with images/matrices of arbitrary type. *
944 * For color images the channel order is BGR[A] *
945 * Antialiasing is supported only for 8-bit image now. *
946 * All the functions include parameter color that means rgb value (that may be *
947 * constructed with CV_RGB macro) for color images and brightness *
948 * for grayscale images. *
949 * If a drawn figure is partially or completely outside of the image, it is clipped.*
950 \****************************************************************************************/
951
952 #define CV_FILLED -1
953
954 #define CV_AA 16
955
956 /** @brief Draws 4-connected, 8-connected or antialiased line segment connecting two points
957 @see cv::line
958 */
959 CVAPI(void) cvLine( CvArr* img, CvPoint pt1, CvPoint pt2,
960 CvScalar color, int thickness CV_DEFAULT(1),
961 int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );
962
963 /** @brief Draws a rectangle given two opposite corners of the rectangle (pt1 & pt2)
964
965 if thickness<0 (e.g. thickness == CV_FILLED), the filled box is drawn
966 @see cv::rectangle
967 */
968 CVAPI(void) cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2,
969 CvScalar color, int thickness CV_DEFAULT(1),
970 int line_type CV_DEFAULT(8),
971 int shift CV_DEFAULT(0));
972
973 /** @brief Draws a rectangle specified by a CvRect structure
974 @see cv::rectangle
975 */
976 CVAPI(void) cvRectangleR( CvArr* img, CvRect r,
977 CvScalar color, int thickness CV_DEFAULT(1),
978 int line_type CV_DEFAULT(8),
979 int shift CV_DEFAULT(0));
980
981
982 /** @brief Draws a circle with specified center and radius.
983
984 Thickness works in the same way as with cvRectangle
985 @see cv::circle
986 */
987 CVAPI(void) cvCircle( CvArr* img, CvPoint center, int radius,
988 CvScalar color, int thickness CV_DEFAULT(1),
989 int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0));
990
991 /** @brief Draws ellipse outline, filled ellipse, elliptic arc or filled elliptic sector
992
993 depending on _thickness_, _start_angle_ and _end_angle_ parameters. The resultant figure
994 is rotated by _angle_. All the angles are in degrees
995 @see cv::ellipse
996 */
997 CVAPI(void) cvEllipse( CvArr* img, CvPoint center, CvSize axes,
998 double angle, double start_angle, double end_angle,
999 CvScalar color, int thickness CV_DEFAULT(1),
1000 int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0));
1001
1002 CV_INLINE void cvEllipseBox( CvArr* img, CvBox2D box, CvScalar color,
1003 int thickness CV_DEFAULT(1),
1004 int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) )
1005 {
1006 CvSize axes = cvSize(
1007 cvRound(box.size.width*0.5),
1008 cvRound(box.size.height*0.5)
1009 );
1010
1011 cvEllipse( img, cvPointFrom32f( box.center ), axes, box.angle,
1012 0, 360, color, thickness, line_type, shift );
1013 }
1014
1015 /** @brief Fills convex or monotonous polygon.
1016 @see cv::fillConvexPoly
1017 */
1018 CVAPI(void) cvFillConvexPoly( CvArr* img, const CvPoint* pts, int npts, CvScalar color,
1019 int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0));
1020
1021 /** @brief Fills an area bounded by one or more arbitrary polygons
1022 @see cv::fillPoly
1023 */
1024 CVAPI(void) cvFillPoly( CvArr* img, CvPoint** pts, const int* npts,
1025 int contours, CvScalar color,
1026 int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );
1027
1028 /** @brief Draws one or more polygonal curves
1029 @see cv::polylines
1030 */
1031 CVAPI(void) cvPolyLine( CvArr* img, CvPoint** pts, const int* npts, int contours,
1032 int is_closed, CvScalar color, int thickness CV_DEFAULT(1),
1033 int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );
1034
1035 #define cvDrawRect cvRectangle
1036 #define cvDrawLine cvLine
1037 #define cvDrawCircle cvCircle
1038 #define cvDrawEllipse cvEllipse
1039 #define cvDrawPolyLine cvPolyLine
1040
1041 /** @brief Clips the line segment connecting *pt1 and *pt2
1042 by the rectangular window
1043
1044 (0<=x<img_size.width, 0<=y<img_size.height).
1045 @see cv::clipLine
1046 */
1047 CVAPI(int) cvClipLine( CvSize img_size, CvPoint* pt1, CvPoint* pt2 );
1048
1049 /** @brief Initializes line iterator.
1050
1051 Initially, line_iterator->ptr will point to pt1 (or pt2, see left_to_right description) location in
1052 the image. Returns the number of pixels on the line between the ending points.
1053 @see cv::LineIterator
1054 */
1055 CVAPI(int) cvInitLineIterator( const CvArr* image, CvPoint pt1, CvPoint pt2,
1056 CvLineIterator* line_iterator,
1057 int connectivity CV_DEFAULT(8),
1058 int left_to_right CV_DEFAULT(0));
1059
1060 #define CV_NEXT_LINE_POINT( line_iterator ) \
1061 { \
1062 int _line_iterator_mask = (line_iterator).err < 0 ? -1 : 0; \
1063 (line_iterator).err += (line_iterator).minus_delta + \
1064 ((line_iterator).plus_delta & _line_iterator_mask); \
1065 (line_iterator).ptr += (line_iterator).minus_step + \
1066 ((line_iterator).plus_step & _line_iterator_mask); \
1067 }
1068
1069
1070 #define CV_FONT_HERSHEY_SIMPLEX 0
1071 #define CV_FONT_HERSHEY_PLAIN 1
1072 #define CV_FONT_HERSHEY_DUPLEX 2
1073 #define CV_FONT_HERSHEY_COMPLEX 3
1074 #define CV_FONT_HERSHEY_TRIPLEX 4
1075 #define CV_FONT_HERSHEY_COMPLEX_SMALL 5
1076 #define CV_FONT_HERSHEY_SCRIPT_SIMPLEX 6
1077 #define CV_FONT_HERSHEY_SCRIPT_COMPLEX 7
1078
1079 #define CV_FONT_ITALIC 16
1080
1081 #define CV_FONT_VECTOR0 CV_FONT_HERSHEY_SIMPLEX
1082
1083
1084 /** Font structure */
1085 typedef struct CvFont
1086 {
1087 const char* nameFont; //Qt:nameFont
1088 CvScalar color; //Qt:ColorFont -> cvScalar(blue_component, green_component, red_component[, alpha_component])
1089 int font_face; //Qt: bool italic /** =CV_FONT_* */
1090 const int* ascii; //!< font data and metrics
1091 const int* greek;
1092 const int* cyrillic;
1093 float hscale, vscale;
1094 float shear; //!< slope coefficient: 0 - normal, >0 - italic
1095 int thickness; //!< Qt: weight /** letters thickness */
1096 float dx; //!< horizontal interval between letters
1097 int line_type; //!< Qt: PointSize
1098 }
1099 CvFont;
1100
1101 /** @brief Initializes font structure (OpenCV 1.x API).
1102
1103 The function initializes the font structure that can be passed to text rendering functions.
1104
1105 @param font Pointer to the font structure initialized by the function
1106 @param font_face Font name identifier. See cv::HersheyFonts and corresponding old CV_* identifiers.
1107 @param hscale Horizontal scale. If equal to 1.0f , the characters have the original width
1108 depending on the font type. If equal to 0.5f , the characters are of half the original width.
1109 @param vscale Vertical scale. If equal to 1.0f , the characters have the original height depending
1110 on the font type. If equal to 0.5f , the characters are of half the original height.
1111 @param shear Approximate tangent of the character slope relative to the vertical line. A zero
1112 value means a non-italic font, 1.0f means about a 45 degree slope, etc.
1113 @param thickness Thickness of the text strokes
1114 @param line_type Type of the strokes, see line description
1115
1116 @sa cvPutText
1117 */
1118 CVAPI(void) cvInitFont( CvFont* font, int font_face,
1119 double hscale, double vscale,
1120 double shear CV_DEFAULT(0),
1121 int thickness CV_DEFAULT(1),
1122 int line_type CV_DEFAULT(8));
1123
1124 CV_INLINE CvFont cvFont( double scale, int thickness CV_DEFAULT(1) )
1125 {
1126 CvFont font;
1127 cvInitFont( &font, CV_FONT_HERSHEY_PLAIN, scale, scale, 0, thickness, CV_AA );
1128 return font;
1129 }
1130
1131 /** @brief Renders text stroke with specified font and color at specified location.
1132 CvFont should be initialized with cvInitFont
1133 @see cvInitFont, cvGetTextSize, cvFont, cv::putText
1134 */
1135 CVAPI(void) cvPutText( CvArr* img, const char* text, CvPoint org,
1136 const CvFont* font, CvScalar color );
1137
1138 /** @brief Calculates bounding box of text stroke (useful for alignment)
1139 @see cv::getTextSize
1140 */
1141 CVAPI(void) cvGetTextSize( const char* text_string, const CvFont* font,
1142 CvSize* text_size, int* baseline );
1143
1144 /** @brief Unpacks color value
1145
1146 if arrtype is CV_8UC?, _color_ is treated as packed color value, otherwise the first channels
1147 (depending on arrtype) of destination scalar are set to the same value = _color_
1148 */
1149 CVAPI(CvScalar) cvColorToScalar( double packed_color, int arrtype );
1150
1151 /** @brief Returns the polygon points which make up the given ellipse.
1152
1153 The ellipse is define by the box of size 'axes' rotated 'angle' around the 'center'. A partial
1154 sweep of the ellipse arc can be done by specifying arc_start and arc_end to be something other than
1155 0 and 360, respectively. The input array 'pts' must be large enough to hold the result. The total
1156 number of points stored into 'pts' is returned by this function.
1157 @see cv::ellipse2Poly
1158 */
1159 CVAPI(int) cvEllipse2Poly( CvPoint center, CvSize axes,
1160 int angle, int arc_start, int arc_end, CvPoint * pts, int delta );
1161
1162 /** @brief Draws contour outlines or filled interiors on the image
1163 @see cv::drawContours
1164 */
1165 CVAPI(void) cvDrawContours( CvArr *img, CvSeq* contour,
1166 CvScalar external_color, CvScalar hole_color,
1167 int max_level, int thickness CV_DEFAULT(1),
1168 int line_type CV_DEFAULT(8),
1169 CvPoint offset CV_DEFAULT(cvPoint(0,0)));
1170
1171 /** @} */
1172
1173 #ifdef __cplusplus
1174 }
1175 #endif
1176
1177 #endif
1178