zoukankan      html  css  js  c++  java
  • OpenCV学习笔记四:ImgProc模块

    一,简介

    这个模块包含一系列的常用图像处理算法。

    二,分析

    此模块包含的文件如下图:

    opencv_imgproc

    其导出算法包括如下:

    /*********************** Background statistics accumulation *****************************/
    
    /* Adds image to accumulator */
    CVAPI(void)  cvAcc( const CvArr* image, CvArr* sum,
                       const CvArr* mask CV_DEFAULT(NULL) );
    
    /* Adds squared image to accumulator */
    CVAPI(void)  cvSquareAcc( const CvArr* image, CvArr* sqsum,
                             const CvArr* mask CV_DEFAULT(NULL) );
    
    /* Adds a product of two images to accumulator */
    CVAPI(void)  cvMultiplyAcc( const CvArr* image1, const CvArr* image2, CvArr* acc,
                               const CvArr* mask CV_DEFAULT(NULL) );
    
    /* Adds image to accumulator with weights: acc = acc*(1-alpha) + image*alpha */
    CVAPI(void)  cvRunningAvg( const CvArr* image, CvArr* acc, double alpha,
                              const CvArr* mask CV_DEFAULT(NULL) );
    
    /****************************************************************************************
    *                                    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)));
    
    /* 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));
    
    /* Convolves the image with the kernel */
    CVAPI(void) cvFilter2D( const CvArr* src, CvArr* dst, const CvMat* kernel,
                            CvPoint anchor CV_DEFAULT(cvPoint(-1,-1)));
    
    /* Finds integral image: SUM(X,Y) = sum(x<X,y<Y)I(x,y) */
    CVAPI(void) cvIntegral( const CvArr* image, CvArr* sum,
                           CvArr* sqsum CV_DEFAULT(NULL),
                           CvArr* tilted_sum CV_DEFAULT(NULL));
    
    /*
       Smoothes the input image with gaussian kernel and then down-samples it.
       dst_width = floor(src_width/2)[+1],
       dst_height = floor(src_height/2)[+1]
    */
    CVAPI(void)  cvPyrDown( const CvArr* src, CvArr* dst,
                            int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );
    
    /*
       Up-samples image and smoothes the result with gaussian kernel.
       dst_width = src_width*2,
       dst_height = src_height*2
    */
    CVAPI(void)  cvPyrUp( const CvArr* src, CvArr* dst,
                          int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );
    
    /* Builds pyramid for an image */
    CVAPI(CvMat**) cvCreatePyramid( const CvArr* img, int extra_layers, double rate,
                                    const CvSize* layer_sizes CV_DEFAULT(0),
                                    CvArr* bufarr CV_DEFAULT(0),
                                    int calc CV_DEFAULT(1),
                                    int filter CV_DEFAULT(CV_GAUSSIAN_5x5) );
    
    /* Releases pyramid */
    CVAPI(void)  cvReleasePyramid( CvMat*** pyramid, int extra_layers );
    
    
    /* Filters image using meanshift algorithm */
    CVAPI(void) cvPyrMeanShiftFiltering( const CvArr* src, CvArr* dst,
        double sp, double sr, int max_level CV_DEFAULT(1),
        CvTermCriteria termcrit CV_DEFAULT(cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,5,1)));
    
    /* Segments image using seed "markers" */
    CVAPI(void) cvWatershed( const CvArr* image, CvArr* markers );
    
    /* Calculates an image derivative using generalized Sobel
       (aperture_size = 1,3,5,7) or Scharr (aperture_size = -1) operator.
       Scharr can be used only for the first dx or dy derivative */
    CVAPI(void) cvSobel( const CvArr* src, CvArr* dst,
                        int xorder, int yorder,
                        int aperture_size CV_DEFAULT(3));
    
    /* Calculates the image Laplacian: (d2/dx + d2/dy)I */
    CVAPI(void) cvLaplace( const CvArr* src, CvArr* dst,
                          int aperture_size CV_DEFAULT(3) );
    
    /* Converts input array pixels from one color space to another */
    CVAPI(void)  cvCvtColor( const CvArr* src, CvArr* dst, int code );
    
    
    /* Resizes image (input array is resized to fit the destination array) */
    CVAPI(void)  cvResize( const CvArr* src, CvArr* dst,
                           int interpolation CV_DEFAULT( CV_INTER_LINEAR ));
    
    /* Warps image with affine transform */
    CVAPI(void)  cvWarpAffine( const CvArr* src, CvArr* dst, const CvMat* map_matrix,
                               int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),
                               CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );
    
    /* Computes affine transform matrix for mapping src[i] to dst[i] (i=0,1,2) */
    CVAPI(CvMat*) cvGetAffineTransform( const CvPoint2D32f * src,
                                        const CvPoint2D32f * dst,
                                        CvMat * map_matrix );
    
    /* Computes rotation_matrix matrix */
    CVAPI(CvMat*)  cv2DRotationMatrix( CvPoint2D32f center, double angle,
                                       double scale, CvMat* map_matrix );
    
    /* Warps image with perspective (projective) transform */
    CVAPI(void)  cvWarpPerspective( const CvArr* src, CvArr* dst, const CvMat* map_matrix,
                                    int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),
                                    CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );
    
    /* Computes perspective transform matrix for mapping src[i] to dst[i] (i=0,1,2,3) */
    CVAPI(CvMat*) cvGetPerspectiveTransform( const CvPoint2D32f* src,
                                             const CvPoint2D32f* dst,
                                             CvMat* map_matrix );
    
    /* Performs generic geometric transformation using the specified coordinate maps */
    CVAPI(void)  cvRemap( const CvArr* src, CvArr* dst,
                          const CvArr* mapx, const CvArr* mapy,
                          int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS),
                          CvScalar fillval CV_DEFAULT(cvScalarAll(0)) );
    
    /* Converts mapx & mapy from floating-point to integer formats for cvRemap */
    CVAPI(void)  cvConvertMaps( const CvArr* mapx, const CvArr* mapy,
                                CvArr* mapxy, CvArr* mapalpha );
    
    /* Performs forward or inverse log-polar image transform */
    CVAPI(void)  cvLogPolar( const CvArr* src, CvArr* dst,
                             CvPoint2D32f center, double M,
                             int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS));
    
    /* Performs forward or inverse linear-polar image transform */
    CVAPI(void)  cvLinearPolar( const CvArr* src, CvArr* dst,
                             CvPoint2D32f center, double maxRadius,
                             int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS));
    
    /* Transforms the input image to compensate lens distortion */
    CVAPI(void) cvUndistort2( const CvArr* src, CvArr* dst,
                              const CvMat* camera_matrix,
                              const CvMat* distortion_coeffs,
                              const CvMat* new_camera_matrix CV_DEFAULT(0) );
    
    /* Computes transformation map from intrinsic camera parameters
       that can used by cvRemap */
    CVAPI(void) cvInitUndistortMap( const CvMat* camera_matrix,
                                    const CvMat* distortion_coeffs,
                                    CvArr* mapx, CvArr* mapy );
    
    /* Computes undistortion+rectification map for a head of stereo camera */
    CVAPI(void) cvInitUndistortRectifyMap( const CvMat* camera_matrix,
                                           const CvMat* dist_coeffs,
                                           const CvMat *R, const CvMat* new_camera_matrix,
                                           CvArr* mapx, CvArr* mapy );
    
    /* Computes the original (undistorted) feature coordinates
       from the observed (distorted) coordinates */
    CVAPI(void) cvUndistortPoints( const CvMat* src, CvMat* dst,
                                   const CvMat* camera_matrix,
                                   const CvMat* dist_coeffs,
                                   const CvMat* R CV_DEFAULT(0),
                                   const CvMat* P CV_DEFAULT(0));
    
    /* creates structuring element used for morphological operations */
    CVAPI(IplConvKernel*)  cvCreateStructuringElementEx(
                int cols, int  rows, int  anchor_x, int  anchor_y,
                int shape, int* values CV_DEFAULT(NULL) );
    
    /* releases structuring element */
    CVAPI(void)  cvReleaseStructuringElement( IplConvKernel** element );
    
    /* erodes input image (applies minimum filter) one or more times.
       If element pointer is NULL, 3x3 rectangular element is used */
    CVAPI(void)  cvErode( const CvArr* src, CvArr* dst,
                          IplConvKernel* element CV_DEFAULT(NULL),
                          int iterations CV_DEFAULT(1) );
    
    /* dilates input image (applies maximum filter) one or more times.
       If element pointer is NULL, 3x3 rectangular element is used */
    CVAPI(void)  cvDilate( const CvArr* src, CvArr* dst,
                           IplConvKernel* element CV_DEFAULT(NULL),
                           int iterations CV_DEFAULT(1) );
    
    /* Performs complex morphological transformation */
    CVAPI(void)  cvMorphologyEx( const CvArr* src, CvArr* dst,
                                 CvArr* temp, IplConvKernel* element,
                                 int operation, int iterations CV_DEFAULT(1) );
    
    /* Calculates all spatial and central moments up to the 3rd order */
    CVAPI(void) cvMoments( const CvArr* arr, CvMoments* moments, int binary CV_DEFAULT(0));
    
    /* Retrieve particular spatial, central or normalized central moments */
    CVAPI(double)  cvGetSpatialMoment( CvMoments* moments, int x_order, int y_order );
    CVAPI(double)  cvGetCentralMoment( CvMoments* moments, int x_order, int y_order );
    CVAPI(double)  cvGetNormalizedCentralMoment( CvMoments* moments,
                                                 int x_order, int y_order );
    
    /* Calculates 7 Hu's invariants from precalculated spatial and central moments */
    CVAPI(void) cvGetHuMoments( CvMoments*  moments, CvHuMoments*  hu_moments );
    
    /*********************************** data sampling **************************************/
    
    /* Fetches pixels that belong to the specified line segment and stores them to the buffer.
       Returns the number of retrieved points. */
    CVAPI(int)  cvSampleLine( const CvArr* image, CvPoint pt1, CvPoint pt2, void* buffer,
                              int connectivity CV_DEFAULT(8));
    
    /* Retrieves the rectangular image region with specified center from the input array.
     dst(x,y) <- src(x + center.x - dst_width/2, y + center.y - dst_height/2).
     Values of pixels with fractional coordinates are retrieved using bilinear interpolation*/
    CVAPI(void)  cvGetRectSubPix( const CvArr* src, CvArr* dst, CvPoint2D32f center );
    
    
    /* Retrieves quadrangle from the input array.
        matrixarr = ( a11  a12 | b1 )   dst(x,y) <- src(A[x y]' + b)
                    ( a21  a22 | b2 )   (bilinear interpolation is used to retrieve pixels
                                         with fractional coordinates)
    */
    CVAPI(void)  cvGetQuadrangleSubPix( const CvArr* src, CvArr* dst,
                                        const CvMat* map_matrix );
    
    /* Measures similarity between template and overlapped windows in the source image
       and fills the resultant image with the measurements */
    CVAPI(void)  cvMatchTemplate( const CvArr* image, const CvArr* templ,
                                  CvArr* result, int method );
    
    /* Computes earth mover distance between
       two weighted point sets (called signatures) */
    CVAPI(float)  cvCalcEMD2( const CvArr* signature1,
                              const CvArr* signature2,
                              int distance_type,
                              CvDistanceFunction distance_func CV_DEFAULT(NULL),
                              const CvArr* cost_matrix CV_DEFAULT(NULL),
                              CvArr* flow CV_DEFAULT(NULL),
                              float* lower_bound CV_DEFAULT(NULL),
                              void* userdata CV_DEFAULT(NULL));
    
    /****************************************************************************************
    *                              Contours retrieving                                       *
    ****************************************************************************************/
    
    /* Retrieves outer and optionally inner boundaries of white (non-zero) connected
       components in the black (zero) background */
    CVAPI(int)  cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour,
                                int header_size CV_DEFAULT(sizeof(CvContour)),
                                int mode CV_DEFAULT(CV_RETR_LIST),
                                int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),
                                CvPoint offset CV_DEFAULT(cvPoint(0,0)));
    
    /* Initalizes contour retrieving process.
       Calls cvStartFindContours.
       Calls cvFindNextContour until null pointer is returned
       or some other condition becomes true.
       Calls cvEndFindContours at the end. */
    CVAPI(CvContourScanner)  cvStartFindContours( CvArr* image, CvMemStorage* storage,
                                int header_size CV_DEFAULT(sizeof(CvContour)),
                                int mode CV_DEFAULT(CV_RETR_LIST),
                                int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),
                                CvPoint offset CV_DEFAULT(cvPoint(0,0)));
    
    /* Retrieves next contour */
    CVAPI(CvSeq*)  cvFindNextContour( CvContourScanner scanner );
    
    
    /* Substitutes the last retrieved contour with the new one
       (if the substitutor is null, the last retrieved contour is removed from the tree) */
    CVAPI(void)   cvSubstituteContour( CvContourScanner scanner, CvSeq* new_contour );
    
    
    /* Releases contour scanner and returns pointer to the first outer contour */
    CVAPI(CvSeq*)  cvEndFindContours( CvContourScanner* scanner );
    
    /* Approximates a single Freeman chain or a tree of chains to polygonal curves */
    CVAPI(CvSeq*) cvApproxChains( CvSeq* src_seq, CvMemStorage* storage,
                                int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),
                                double parameter CV_DEFAULT(0),
                                int  minimal_perimeter CV_DEFAULT(0),
                                int  recursive CV_DEFAULT(0));
    
    /* Initalizes Freeman chain reader.
       The reader is used to iteratively get coordinates of all the chain points.
       If the Freeman codes should be read as is, a simple sequence reader should be used */
    CVAPI(void) cvStartReadChainPoints( CvChain* chain, CvChainPtReader* reader );
    
    /* Retrieves the next chain point */
    CVAPI(CvPoint) cvReadChainPoint( CvChainPtReader* reader );
    
    
    /****************************************************************************************
    *                            Contour Processing and Shape Analysis                       *
    ****************************************************************************************/
    
    /* Approximates a single polygonal curve (contour) or
       a tree of polygonal curves (contours) */
    CVAPI(CvSeq*)  cvApproxPoly( const void* src_seq,
                                 int header_size, CvMemStorage* storage,
                                 int method, double eps,
                                 int recursive CV_DEFAULT(0));
    
    /* Calculates perimeter of a contour or length of a part of contour */
    CVAPI(double)  cvArcLength( const void* curve,
                                CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ),
                                int is_closed CV_DEFAULT(-1));
    
    CV_INLINE double cvContourPerimeter( const void* contour )
    {
        return cvArcLength( contour, CV_WHOLE_SEQ, 1 );
    }
    
    
    /* Calculates contour boundning rectangle (update=1) or
       just retrieves pre-calculated rectangle (update=0) */
    CVAPI(CvRect)  cvBoundingRect( CvArr* points, int update CV_DEFAULT(0) );
    
    /* Calculates area of a contour or contour segment */
    CVAPI(double)  cvContourArea( const CvArr* contour,
                                  CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ),
                                  int oriented CV_DEFAULT(0));
    
    /* Finds minimum area rotated rectangle bounding a set of points */
    CVAPI(CvBox2D)  cvMinAreaRect2( const CvArr* points,
                                    CvMemStorage* storage CV_DEFAULT(NULL));
    
    /* Finds minimum enclosing circle for a set of points */
    CVAPI(int)  cvMinEnclosingCircle( const CvArr* points,
                                      CvPoint2D32f* center, float* radius );
    
    /* Compares two contours by matching their moments */
    CVAPI(double)  cvMatchShapes( const void* object1, const void* object2,
                                  int method, double parameter CV_DEFAULT(0));
    
    /* Calculates exact convex hull of 2d point set */
    CVAPI(CvSeq*) cvConvexHull2( const CvArr* input,
                                 void* hull_storage CV_DEFAULT(NULL),
                                 int orientation CV_DEFAULT(CV_CLOCKWISE),
                                 int return_points CV_DEFAULT(0));
    
    /* Checks whether the contour is convex or not (returns 1 if convex, 0 if not) */
    CVAPI(int)  cvCheckContourConvexity( const CvArr* contour );
    
    
    /* Finds convexity defects for the contour */
    CVAPI(CvSeq*)  cvConvexityDefects( const CvArr* contour, const CvArr* convexhull,
                                       CvMemStorage* storage CV_DEFAULT(NULL));
    
    /* Fits ellipse into a set of 2d points */
    CVAPI(CvBox2D) cvFitEllipse2( const CvArr* points );
    
    /* Finds minimum rectangle containing two given rectangles */
    CVAPI(CvRect)  cvMaxRect( const CvRect* rect1, const CvRect* rect2 );
    
    /* Finds coordinates of the box vertices */
    CVAPI(void) cvBoxPoints( CvBox2D box, CvPoint2D32f pt[4] );
    
    /* Initializes sequence header for a matrix (column or row vector) of points -
       a wrapper for cvMakeSeqHeaderForArray (it does not initialize bounding rectangle!!!) */
    CVAPI(CvSeq*) cvPointSeqFromMat( int seq_kind, const CvArr* mat,
                                     CvContour* contour_header,
                                     CvSeqBlock* block );
    
    /* Checks whether the point is inside polygon, outside, on an edge (at a vertex).
       Returns positive, negative or zero value, correspondingly.
       Optionally, measures a signed distance between
       the point and the nearest polygon edge (measure_dist=1) */
    CVAPI(double) cvPointPolygonTest( const CvArr* contour,
                                      CvPoint2D32f pt, int measure_dist );
    
    /****************************************************************************************
    *                                  Histogram functions                                   *
    ****************************************************************************************/
    
    /* Creates new histogram */
    CVAPI(CvHistogram*)  cvCreateHist( int dims, int* sizes, int type,
                                       float** ranges CV_DEFAULT(NULL),
                                       int uniform CV_DEFAULT(1));
    
    /* Assignes histogram bin ranges */
    CVAPI(void)  cvSetHistBinRanges( CvHistogram* hist, float** ranges,
                                    int uniform CV_DEFAULT(1));
    
    /* Creates histogram header for array */
    CVAPI(CvHistogram*)  cvMakeHistHeaderForArray(
                                int  dims, int* sizes, CvHistogram* hist,
                                float* data, float** ranges CV_DEFAULT(NULL),
                                int uniform CV_DEFAULT(1));
    
    /* Releases histogram */
    CVAPI(void)  cvReleaseHist( CvHistogram** hist );
    
    /* Clears all the histogram bins */
    CVAPI(void)  cvClearHist( CvHistogram* hist );
    
    /* Finds indices and values of minimum and maximum histogram bins */
    CVAPI(void)  cvGetMinMaxHistValue( const CvHistogram* hist,
                                       float* min_value, float* max_value,
                                       int* min_idx CV_DEFAULT(NULL),
                                       int* max_idx CV_DEFAULT(NULL));
    
    
    /* Normalizes histogram by dividing all bins by sum of the bins, multiplied by <factor>.
       After that sum of histogram bins is equal to <factor> */
    CVAPI(void)  cvNormalizeHist( CvHistogram* hist, double factor );
    
    
    /* Clear all histogram bins that are below the threshold */
    CVAPI(void)  cvThreshHist( CvHistogram* hist, double threshold );
    
    
    /* Compares two histogram */
    CVAPI(double)  cvCompareHist( const CvHistogram* hist1,
                                  const CvHistogram* hist2,
                                  int method);
    
    /* Copies one histogram to another. Destination histogram is created if
       the destination pointer is NULL */
    CVAPI(void)  cvCopyHist( const CvHistogram* src, CvHistogram** dst );
    
    
    /* Calculates bayesian probabilistic histograms
       (each or src and dst is an array of <number> histograms */
    CVAPI(void)  cvCalcBayesianProb( CvHistogram** src, int number,
                                    CvHistogram** dst);
    
    /* Calculates array histogram */
    CVAPI(void)  cvCalcArrHist( CvArr** arr, CvHistogram* hist,
                                int accumulate CV_DEFAULT(0),
                                const CvArr* mask CV_DEFAULT(NULL) );
    
    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 );
    }
    
    /* Calculates back project */
    CVAPI(void)  cvCalcArrBackProject( CvArr** image, CvArr* dst,
                                       const CvHistogram* hist );
    #define  cvCalcBackProject(image, dst, hist) cvCalcArrBackProject((CvArr**)image, dst, hist)
    
    
    /* Does some sort of template matching but compares histograms of
       template and each window location */
    CVAPI(void)  cvCalcArrBackProjectPatch( CvArr** image, CvArr* dst, CvSize range,
                                            CvHistogram* hist, int method,
                                            double factor );
    #define  cvCalcBackProjectPatch( image, dst, range, hist, method, factor ) 
         cvCalcArrBackProjectPatch( (CvArr**)image, dst, range, hist, method, factor )
    
    
    /* calculates probabilistic density (divides one histogram by another) */
    CVAPI(void)  cvCalcProbDensity( const CvHistogram* hist1, const CvHistogram* hist2,
                                    CvHistogram* dst_hist, double scale CV_DEFAULT(255) );
    
    /* equalizes histogram of 8-bit single-channel image */
    CVAPI(void)  cvEqualizeHist( const CvArr* src, CvArr* dst );
    
    
    /* Applies distance transform to binary image */
    CVAPI(void)  cvDistTransform( const CvArr* src, CvArr* dst,
                                  int distance_type CV_DEFAULT(CV_DIST_L2),
                                  int mask_size CV_DEFAULT(3),
                                  const float* mask CV_DEFAULT(NULL),
                                  CvArr* labels CV_DEFAULT(NULL),
                                  int labelType CV_DEFAULT(CV_DIST_LABEL_CCOMP));
    
    
    /* 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 );
    
    /* 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));
    
    /* 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));
    
    /****************************************************************************************
    *                                  Feature detection                                     *
    ****************************************************************************************/
    
    /* Runs canny edge detector */
    CVAPI(void)  cvCanny( const CvArr* image, CvArr* edges, double threshold1,
                          double threshold2, int  aperture_size CV_DEFAULT(3) );
    
    /* Calculates constraint image for corner detection
       Dx^2 * Dyy + Dxx * Dy^2 - 2 * Dx * Dy * Dxy.
       Applying threshold to the result gives coordinates of corners */
    CVAPI(void) cvPreCornerDetect( const CvArr* image, CvArr* corners,
                                   int aperture_size CV_DEFAULT(3) );
    
    /* Calculates eigen values and vectors of 2x2
       gradient covariation matrix at every image pixel */
    CVAPI(void)  cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv,
                                           int block_size, int aperture_size CV_DEFAULT(3) );
    
    /* Calculates minimal eigenvalue for 2x2 gradient covariation matrix at
       every image pixel */
    CVAPI(void)  cvCornerMinEigenVal( const CvArr* image, CvArr* eigenval,
                                      int block_size, int aperture_size CV_DEFAULT(3) );
    
    /* Harris corner detector:
       Calculates det(M) - k*(trace(M)^2), where M is 2x2 gradient covariation matrix for each pixel */
    CVAPI(void)  cvCornerHarris( const CvArr* image, CvArr* harris_responce,
                                 int block_size, int aperture_size CV_DEFAULT(3),
                                 double k CV_DEFAULT(0.04) );
    
    /* 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 );
    
    /* 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) );
    
    /* Finds lines on binary image using one of several methods.
       line_storage is either memory storage or 1 x <max number of lines> 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));
    
    /* 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));
    
    /* Fits a line into set of 2d or 3d points in a robust way (M-estimator technique) */
    CVAPI(void)  cvFitLine( const CvArr* points, int dist_type, double param,
                            double reps, double aeps, float* line );

    ------------------------------------------------------------------------------------------------------

    头文件:

    types_c.h , 定义了连通区域结构CvConnectedComp,平滑算法ID,颜色空间转换ID,像素插值算法ID,形状类型ID(RECT,CROSS等),形态学算法ID,中心矩/空间矩结构CvMoments,CvHuMoments,模板匹配类型ID,轮廓,形状匹配算法ID,直方图比较算法ID,二值化算法ID,泛洪算法类型,边缘检测,hough变换算法ID;

    imgporc_c.h ,C/C++兼容头文件,其定义见上述函数列表;

    imgproc.hpp,C++ only头文件,其定义参考imgproc_c.h

    ------------------------------------------------------------------------------------------------------

    实现文件:

    实现文件内容与文件名匹配,诸多算法均在其中一一有实现,目前不做具体分析。

    ------------------------------------------------------------------------------------------------------

    三,总结

    opencv包含常见的颜色空间转换,图像缩放,形态学操作等基本图像处理算法;也包含二值化,边缘检测,模板匹配,轮廓检测,直方图,泛洪,hough变换等高级主题。可在需要时研究相关实现,或者向其中添加所需算法。作为一个图像处理包,经过优化测试之后可应用于实际工业环境中。

    如果你喜欢这篇文章,欢迎推荐!

    开放,共享,互联网的未来 !
    技术改变世界,我是程序员,我喂自己袋盐 !

    Fork me on GitHub
  • 相关阅读:
    Oracle EXP
    Using Spring in Web and WinForms
    System.ComponentModel(未完...)
    工作必须得到强势方的支持!
    book.Save()还是bookManager.Save(book)?
    C#中常用的Attribute搜集(刚开始...)
    领域模型是否能够屏蔽数据库?
    合格代码的最基本的标准
    关于配置系统的设计
    对象分类
  • 原文地址:https://www.cnblogs.com/xylc/p/3406046.html
Copyright © 2011-2022 走看看