(* /////////////////////////////////////////////////////////////////////////////////////// // // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. // // By downloading, copying, installing or using the software you agree to this license. // If you do not agree to this license, do not download, install, // copy or use the software. // // // License Agreement // For Open Source Computer Vision Library // // Copyright (C) 2000-2008, Intel Corporation, all rights reserved. // Copyright (C) 2009, Willow Garage Inc., all rights reserved. // Third party copyrights are property of their respective owners. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // // * Redistribution's of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // // * Redistribution's in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // // * The name of the copyright holders may not be used to endorse or promote products // derived from this software without specific prior written permission. // // This software is provided by the copyright holders and contributors "as is" and // any express or implied warranties, including, but not limited to, the implied // warranties of merchantability and fitness for a particular purpose are disclaimed. // In no event shall the Intel Corporation or contributors be liable for any direct, // indirect, incidental, special, exemplary, or consequential damages // (including, but not limited to, procurement of substitute goods or services; // loss of use, data, or profits; or business interruption) however caused // and on any theory of liability, whether in contract, strict liability, // or tort (including negligence or otherwise) arising in any way out of // the use of this software, even if advised of the possibility of such damage. // // *) {$IFDEF DEBUG} {$A8,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N+,O-,P+,Q+,R+,S-,T-,U-,V+,W+,X+,Y+,Z1} {$ELSE} {$A8,B-,C-,D-,E-,F-,G+,H+,I+,J-,K-,L-,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y-,Z1} {$ENDIF} {$WARN SYMBOL_DEPRECATED OFF} {$WARN SYMBOL_PLATFORM OFF} {$WARN UNIT_PLATFORM OFF} {$WARN UNSAFE_TYPE OFF} {$WARN UNSAFE_CODE OFF} {$WARN UNSAFE_CAST OFF} unit imgproc_c; interface uses Core.types_c, imgproc.types_c; (* ********************** Background statistics accumulation **************************** *) (* Adds image to accumulator *) // CVAPI(procedure)cvAcc(var Adds squared image to accumulator * ) // CVAPI(procedure)cvSquareAcc(CvArr * image: v1: 0)): CvArr; (var sqsum: CvArr; var Adds a product of two images to accumulator * ) // CVAPI(procedure)cvMultiplyAcc(CvArr * image1: unction mask CV_DEFAULT(v1: 0)): CvArr; (; // var image2: CvArr; var acc: CvArr; var Adds image to accumulator with weights: acc = acc * (1 - alpha) + image * alpha * ) // CVAPI(procedure)cvRunningAvg(CvArr * image: unction mask CV_DEFAULT(v1: 0)): CvArr; (; // var acc: CvArr;alpha: Double; // ******************************* image Processing ******************************* { /* Copies source 2D array inside of the larger destination array and makes a border of the specified type (IPL_BORDER_*) around the copied area. */ CVAPI(void) cvCopyMakeBorder( const CvArr* src, CvArr* dst, CvPoint offset, int bordertype, CvScalar value CV_DEFAULT(cvScalarAll(0))); } procedure cvCopyMakeBorder( { } const src: pIplImage; { } dst: pIplImage; { } offset: TCvPoint; { } bordertype: Integer; { } value: TCvScalar { * cvScalarAll(0) * } ); cdecl; { // Smoothes array (removes noise) CVAPI(void) cvSmooth( const CvArr* src, CvArr* dst, int smoothtype CV_DEFAULT(CV_GAUSSIAN), int size1 CV_DEFAULT(3), int size2 CV_DEFAULT(0), double sigma1 CV_DEFAULT(0), double sigma2 CV_DEFAULT(0)); } procedure cvSmooth( { } const src: pIplImage; { } dst: pIplImage; { } smoothtype: Integer = CV_GAUSSIAN; { } size1: Integer = 3; { } size2: Integer = 0; { } sigma1: double = 0; { } sigma2: double = 0); cdecl; // (* Convolves the image with the kernel *) // CVAPI( // procedure)cvFilter2D(v1: CvPoint(-1; // { Finds integral image: SUM(X,Y) = sum(x histograms *) // CVAPI(procedure) cvCalcBayesianProb( // src: array of CvHistogram; // number: Integer; // dst: array of CvHistogram); { /* Calculates array histogram */ CVAPI(void) cvCalcArrHist( CvArr** arr, CvHistogram* hist, int accumulate CV_DEFAULT(0), const CvArr* mask CV_DEFAULT(NULL) ); } procedure cvCalcArrHist(arr: ppIplImage; hist: pCvHistogram; accumulate: Integer = 0; const mask: pIplImage = nil); cdecl; // CV_INLINE void cvCalcHist( // IplImage** image, // CvHistogram* hist, // int accumulate CV_DEFAULT(0), // const CvArr* mask CV_DEFAULT(NULL) ) // { // cvCalcArrHist( (CvArr**)image, hist, accumulate, mask ); // } procedure cvCalcHist(image: ppIplImage; hist: pCvHistogram; accumulate: Integer = 0; const mask: pIplImage = nil); inline; // var mask CV_DEFAULT(0) )begin cvCalcArrHist( (CvArr*)image: vArr; // v5: hist; // v6: accumulate; // var Calculates back project *) { /* Calculates back project */ CVAPI(void) cvCalcArrBackProject( CvArr** image, CvArr* dst, const CvHistogram* hist ); #define cvCalcBackProject(image, dst, hist) cvCalcArrBackProject((CvArr**)image, dst, hist) } procedure cvCalcArrBackProject(var image: pCvArr; dst: pCvArr; const hist: pCvHistogram); cdecl; procedure cvCalcBackProject(var image: pIplImage; dst: pIplImage; const hist: pCvHistogram); cdecl; // (* Does some sort of template matching but compares histograms of // template and each window location *) // CVAPI(procedure) cvCalcArrBackProjectPatch( // image: array of CvArr; // var dst: CvArr; // range: CvSize; // var hist: CvHistogram; // method: Integer; // factor: Double); /// / >> Following declaration is a macro definition! // const cvCalcBackProjectPatch( image, dst, range, hist, method, factor ) cvCalcArrBackProjectPatch( (CvArr; // // (* calculates probabilistic density (divides one histogram by another) *) // CVAPI(procedure) cvCalcProbDensity( { /* equalizes histogram of 8-bit single-channel image */ CVAPI(void) cvEqualizeHist( const CvArr* src, CvArr* dst ); } procedure cvEqualizeHist(const src, dst: pIplImage); cdecl; // // // (* Applies distance transform to binary image *) // CVAPI(procedure) cvDistTransform( // 3: v1:); // mask CV_DEFAULT(0): unction; // labels CV_DEFAULT(0): function; // labelType CV_DEFAULT(CV_DIST_LABEL_CCOMP): Integer): Integer; // // // (* Applies fixed-level threshold to grayscale image. // This is a basic operation applied before retrieving contours *) // CVAPI(double) cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type ); function cvThreshold(const src, dst: pIplImage; threshold, max_value: double; threshold_type: Integer): double; cdecl; { /* Applies adaptive threshold to grayscale image. The two parameters for methods CV_ADAPTIVE_THRESH_MEAN_C and CV_ADAPTIVE_THRESH_GAUSSIAN_C are: neighborhood size (3, 5, 7 etc.), and a constant subtracted from mean (...,-3,-2,-1,0,1,2,3,...) */ CVAPI(void) cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value, int adaptive_method CV_DEFAULT(CV_ADAPTIVE_THRESH_MEAN_C), int threshold_type CV_DEFAULT(CV_THRESH_BINARY), int block_size CV_DEFAULT(3), double param1 CV_DEFAULT(5)); } procedure cvAdaptiveThreshold( { } const src: pIplImage; { } dst: pIplImage; { } max_value: double; { } adaptive_method: Integer = CV_ADAPTIVE_THRESH_MEAN_C; { } threshold_type: Integer = CV_THRESH_BINARY; { } block_size: Integer = 3; { } param1: double = 5); cdecl; { /* Fills the connected component until the color difference gets large enough */ CVAPI(void) cvFloodFill( CvArr* image, CvPoint seed_point, CvScalar new_val, CvScalar lo_diff CV_DEFAULT(cvScalarAll(0)), CvScalar up_diff CV_DEFAULT(cvScalarAll(0)), CvConnectedComp* comp CV_DEFAULT(NULL), int flags CV_DEFAULT(4), CvArr* mask CV_DEFAULT(NULL)); } procedure cvFloodFill( { } image: pIplImage; { } seed_point: TCvPoint; { } new_val: TCvScalar; { } lo_diff: TCvScalar { * cvScalarAll(0) * }; { } up_diff: TCvScalar { * cvScalarAll(0) * }; { } comp: pCvConnectedComp = NIL; { } flags: Integer = 4; { } mask: pCvArr = NIL); cdecl; // **************************************************************************************** // * Feature detection * // **************************************************************************************** { /* Runs canny edge detector */ CVAPI(void) cvCanny( const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size CV_DEFAULT(3) ); } procedure cvCanny(const image: pIplImage; edges: pIplImage; threshold1: double; threshold2: double; aperture_size: Integer = 3); cdecl; // (* Runs canny edge detector *) CVAPI( // procedure)cvCanny(CvArr * image: array of // function flags CV_DEFAULT(v1: 0)): Integer; (; var edges: CvArr; threshold1: Double; // threshold2: Double; var Calculates constraint image for corner detection Dx xor 2 * Dyy + Dxx * // Dy xor 2 - 2 * Dx * Dy * Dxy.Applying threshold to the cResult gives coordinates of // corners * ) // CVAPI( // procedure)cvPreCornerDetect(CvArr * image: // function aperture_size CV_DEFAULT(v1: 3)): Integer; (; var corners: CvArr; // var Calculates eigen values and vectors of 2 x2 gradient covariation matrix at every image // pixel * )CVAPI( // procedure)cvCornerEigenValsAndVecs(CvArr * image: // function aperture_size CV_DEFAULT(v1: 3)): Integer; (; var eigenvv: CvArr; block_size: // function; var Calculates minimal eigenvalue for 2 x2 gradient covariation matrix at every image // pixel * )CVAPI( // procedure)cvCornerMinEigenVal(CvArr * image: Integer aperture_size CV_DEFAULT(v1: 3)): Integer; (; // var eigenval: CvArr; block_size: // function; var Harris corner detector: Calculates det(M) - k * (trace(M) xor 2) // : Integer aperture_size CV_DEFAULT(v1: 3)): Integer; (; var)CVAPI( // procedure)cvCornerHarris(CvArr * image: where M is 2 x2 gradient covariation matrix for each pixel; // var harris_responce: CvArr; block_size: { /* Adjust corner position using some sort of gradient search */ CVAPI(void) cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners, int count, CvSize win, CvSize zero_zone, CvTermCriteria criteria ); } procedure cvFindCornerSubPix(const image: pIplImage; corners: pCvPoint2D32f; count: Integer; win: TCvSize; zero_zone: TCvSize; criteria: TCvTermCriteria); cdecl; // function; var Adjust corner position using some sort of gradient search * )CVAPI( // procedure)cvFindCornerSubPix(CvArr * image: Integer aperture_size CV_DEFAULT(v1: 0.04)): Integer; (; // var corners: CvPoint2D32f; count: Integer; win: CvSize; zero_zone: CvSize; // var Finds a sparse set of points within the selected region that seem to be easy to track * ) { /* Finds a sparse set of points within the selected region that seem to be easy to track */ CVAPI(void) cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image, CvArr* temp_image, CvPoint2D32f* corners, int* corner_count, double quality_level, double min_distance, const CvArr* mask CV_DEFAULT(NULL), int block_size CV_DEFAULT(3), int use_harris CV_DEFAULT(0), double k CV_DEFAULT(0.04) ); } procedure cvGoodFeaturesToTrack(const image: pIplImage; eig_image: pIplImage; temp_image: pIplImage; corners: pCvPoint2D32f; corner_count: pInteger; quality_level: double; min_distance: double; const mask: pIplImage = nil; block_size: Integer = 3; use_harris: Integer = 0; k: double = 0.04); cdecl; // (* Finds lines on binary image using one of several methods. // line_storage is either memory storage or 1 x CvMat, its // number of columns is changed by the cFunction. // method is one of CV_HOUGH_*; // rho, theta and threshold are used for each of those methods; // param1 ~ line length, param2 ~ line gap - for probabilistic, // param1 ~ srn, param2 ~ stn - for multi-scale *) // CVAPI(CvSeq)cvHoughLines2(CvArr * image, Pointer line_storage, Integer method, Double rho, // Double theta, Integer threshold, Double param1 CV_DEFAULT(0), Double param2 CV_DEFAULT(0) // ): Double; { /* Finds lines on binary image using one of several methods. line_storage is either memory storage or 1 x CvMat, its number of columns is changed by the function. method is one of CV_HOUGH_*; rho, theta and threshold are used for each of those methods; param1 ~ line length, param2 ~ line gap - for probabilistic, param1 ~ srn, param2 ~ stn - for multi-scale */ CVAPI(CvSeq*) cvHoughLines2( CvArr* image, void* line_storage, int method, double rho, double theta, int threshold, double param1 CV_DEFAULT(0), double param2 CV_DEFAULT(0)); } function cvHoughLines2( { } image: pIplImage; { } line_storage: Pointer; { } method: Integer; { } rho: double; { } theta: double; { } threshold: Integer; { } param1: double = 0; { } param2: double = 0): PCvSeq; cdecl; { /* Finds circles in the image */ CVAPI(CvSeq*) cvHoughCircles( CvArr* image, void* circle_storage, int method, double dp, double min_dist, double param1 CV_DEFAULT(100), double param2 CV_DEFAULT(100), int min_radius CV_DEFAULT(0), int max_radius CV_DEFAULT(0)); } function cvHoughCircles( { } image: pIplImage; { } circle_storage: Pointer; { } method: Integer; { } dp: double; { } min_dist: double; { } param1: double = 100; { } param2: double = 100; { } min_radius: Integer = 0; { } max_radius: Integer = 0): PCvSeq; cdecl; // (* Fits a line into set of 2d or 3d points in a robust way (M-estimator technique) *) // CVAPI( // procedure)cvFitLine(CvArr * points, Integer dist_type, Double param, Double reps, Double aeps, // Single * line): Double; // // {$IFDEF __cplusplus} // end; // {$ENDIF} // {$ENDIF} implementation Uses uLibName; //procedure cvCvtColor(const src: pIplImage; dst: pIplImage; code: Integer); external imgproc_Dll; procedure cvCvtColor(const src: pIplImage; dst: pIplImage; code: Integer); external imgproc_Dll name 'cvCvtColor'; procedure cvCvtColor(const src: pCvMat; dst: pCvMat; code: Integer); external imgproc_Dll name 'cvCvtColor'; procedure cvCvtColor(const src: pIplImage; dst: pCvMat; code: Integer); external imgproc_Dll name 'cvCvtColor'; function cvThreshold; external imgproc_Dll; procedure cvSmooth; external imgproc_Dll; procedure cvResize; external imgproc_Dll; function cvCreateStructuringElementEx; external imgproc_Dll; procedure cvErode; external imgproc_Dll; procedure cvDilate; external imgproc_Dll; procedure cvReleaseStructuringElement; external imgproc_Dll; procedure cvMorphologyEx; external imgproc_Dll; procedure cvFloodFill; external imgproc_Dll; procedure cvAdaptiveThreshold; external imgproc_Dll; procedure cvCopyMakeBorder; external imgproc_Dll; procedure cvSobel; external imgproc_Dll; procedure cvLaplace; external imgproc_Dll; procedure cvCanny; external imgproc_Dll; function cvHoughLines2; external imgproc_Dll; function cvHoughCircles; external imgproc_Dll; procedure cvIntegral; external imgproc_Dll; function cvFindContours; external imgproc_Dll; function cvApproxPoly; external imgproc_Dll; procedure cvEqualizeHist; external imgproc_Dll; procedure cvFindCornerSubPix; external imgproc_Dll; procedure cvInitUndistortMap; external imgproc_Dll; procedure cvRemap; external imgproc_Dll; function cvArcLength; external imgproc_Dll; function cvContourPerimeter(const contour: Pointer): double; inline; begin Result := cvArcLength(contour, CV_WHOLE_SEQ, 1); end; function cvMatchShapes; external imgproc_Dll; function cv2DRotationMatrix; external imgproc_Dll; procedure cvWarpAffine; external imgproc_Dll; function cvGetPerspectiveTransform; external imgproc_Dll; procedure cvWarpPerspective; external imgproc_Dll; function cvContourArea; external imgproc_Dll; function cvConvexHull2; external imgproc_Dll; function cvConvexityDefects; external imgproc_Dll; procedure cvPyrDown; external imgproc_Dll; procedure cvPyrUp; external imgproc_Dll; function cvCheckContourConvexity; external imgproc_Dll; function cvCreateHist; external imgproc_Dll; procedure cvCalcHist; begin cvCalcArrHist(image, hist, accumulate, mask); end; procedure cvGetMinMaxHistValue; external imgproc_Dll; procedure cvCalcArrHist; external imgproc_Dll; procedure cvCalcArrBackProject; external imgproc_Dll; procedure cvCalcBackProject; external imgproc_Dll name 'cvCalcArrBackProject'; procedure cvGoodFeaturesToTrack; external imgproc_Dll; function cvMinAreaRect2; external imgproc_Dll; function cvMinEnclosingCircle; external imgproc_Dll; procedure cvBoxPoints; external imgproc_Dll; end.