• OPENCV初探(五)


     //做卷积     
          void cvFilter2D(
                const CvArr* src,
                CvArr* dst,
                const CvMat* kernel,                     //如果定义了anchor可为偶数,否则为奇数         且类型须为CV_32FC1
                CvPoint anchor = cvPoint(-1,-1)     //默认值为核的中间点
          );
    //处理边界
        void cvCopyMakeBorder(
                const CvArr* src,
                CvArr* dst,
                CvPoint offset,                             //原始图片放置目标图像偏移 ref:cvPoint((N-1)/2,(N-1)/2)      
                                                                    (Ax , Ay) anchor不在正中心时
                int bordertype,                            //IPL_BORDER_CONSTANT or IPL_BORDER_REPLICATE
                                                                   (IPL_BORDER_REFLECT and IPL_BORDER_WRAP)  no implement   now      
                CvScalar value = cvScalarAll(0)
         );
    //卷积应用之一:导数
          cvSobel(
                const CvArr* src,      
                CvArr* dst,                                //IPL_DEPTH_16S防止溢出
                int xorder,                                 //xorder,yorder必须非零
                int yorder,
                int aperture_size = 3                  //模板大小             CV_SCHARR可减少小尺寸Sobel算子不精确的问题
          );

        void cvLaplace(
                const CvArr* src,                8u   32f
                CvArr* dst,                        16s  32f
                int apertureSize = 3
          );

          void cvCanny(
                const CvArr* img,               //须是灰度图
                CvArr* edges,
                double lowThresh,
                double highThresh,
                int apertureSize = 3
          );

    //Hough变换
          CvSeq* cvHoughLines2(
                CvArr* image,
                void* line_storage,
                int method,                       //SHT不用param1 param2                   PPHT                                      MSHT         
                double rho,
                double theta,
                int threshold,                    //检测多少个点才返回线
                double param1 = 0,                                                                  返回线的最小长度                       rho/param1
                double param2 = 0                                                                   线的分隔(共线时是否合并)         theta/param2
          );

          CvSeq* cvHoughCircles(
                CvArr* image,
                void* circle_storage,
                int method,                       //必须设为CV_HOUGH_GRADIENT
                double dp,                        //output精度  dp>=1
                double min_dist,               //将其视为两个圆的最小距离
                double param1 = 100,       //CANNY门限 high=param1  low=param1/2
                double param2 = 300,       //累积门限
                int min_radius = 0,
                int max_radius = 0
          );
    //映射
          void cvRemap(
                const CvArr* src,
                CvArr* dst,
                const CvArr* mapx,
                const CvArr* mapy,
                int flags = CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS,                    //CV_WARP_FILL_OUTLIERS外面的将被填充
                CvScalar fillval = cvScalarAll(0)
          );
    //flags values Meaning
    CV_INTER_NN Nearest neighbor
    CV_INTER_LINEAR Bilinear (default)
    CV_INTER_AREA Pixel area resampling
    CV_INTER_CUBIC Bicubic interpolation

    //几何变换
    //For Dense
          void cvWarpAffine(                                                                        void cvWarpPerspective(      
                const CvArr* src,                                                                           const CvArr* src,
                CvArr* dst,                                                                                    CvArr* dst,
                const CvMat* map_matrix,      //(3x2)                                              const CvMat* map_matrix,           //(3x3)
                int flags = CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS,                int flags = CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS,
                CvScalar fillval = cvScalarAll(0)                                                         CvScalar fillval = cvScalarAll(0)
          );                                                                                                );
    //较上面在某些情况下简单易用
          void cvGetQuadrangleSubPix(
                const CvArr* src,
                CvArr* dst,
                const CvMat* map_matrix
          );

          CvMat* cvGetAffineTransform(                                                          CvMat* cvGetPerspectiveTransform(
                const CvPoint2D32f* pts_src,      3_POINTS                                            const CvPoint2D32f* pts_src,      4_POINTS
                const CvPoint2D32f* pts_dst,                                                                const CvPoint2D32f* pts_dst,
                CvMat* map_matrix                                                                               CvMat* map_matrix
          );                                                                                                   );

          CvMat* cv2DRotationMatrix(                                                                         
                CvPoint2D32f center,
                double angle,
                double scale,
                CvMat* map_matrix
          );
    //For Sparse
          void cvTransform(                                                                         void cvPerspectiveTransform(
                const CvArr* src,                                                                           const CvArr* src,
                CvArr* dst,                                                                                    CvArr* dst,
                const CvMat* transmat,                                                                  const CvMat* mat
                const CvMat* shiftvec = NULL                                                    );
          );


    //坐标变换
          void cvCartToPolar(
                const CvArr* x,
                const CvArr* y,
                CvArr* magnitude,
                CvArr* angle = NULL,
                int angle_in_degrees = 0
          );

          void cvPolarToCart(
                const CvArr* magnitude,
                const CvArr* angle,
                CvArr* x,      
                CvArr* y,
                int angle_in_degrees = 0
          );

         void cvLogPolar(
                const CvArr* src,
                CvArr* dst,
                CvPoint2D32f center,      
                double m,
                int flags = CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS
          );
    //离散傅里叶变换
          void cvDFT(
                const CvArr* src,
                CvArr* dst,                                                                                 CV_DXT_INV_SCALE 
                int flags,                  //CV_DXT_FORWARD           CV_DXT_INVERSE            CV_DXT_SCALE       CV_DXT_ROWS (打包方式不一样)
                int nonzero_rows = 0   //当非  2^ 3^ 5^整数倍时  可忽略的行
          );
    //为了避免解包再乘而使用的API
          void cvMulSpectrums(
                const CvArr* src1,
                const CvArr* src2,
                CvArr* dst,
                int flags           //CV_DXT_MUL_CONJ(乘以共轭)            CV_DXT_FORWARD
          );
    //离散余弦变换
          void cvDCT(
                const CvArr* src,
                CvArr* dst,
                int flags            //已经考虑SCALE  CV_DXT_SCALE 没效果
          );

          void cvIntegral(                              
                const CvArr* image,                              1  2  3                    1   3    6
                CvArr* sum,                                         2  3  4                    3   8   15
                CvArr* sqsum = NULL,                          3  4  5                    6  15   27
                CvArr* tilted_sum = NULL
          );
          
          Void cvDistTransform(
                const CvArr* src,
                CvArr* dst,
                int distance_type = CV_DIST_L2,
                int mask_size = 3,
                const float* kernel = NULL,
                CvArr* labels = NULL
          );
    //直方图均衡
          void cvEqualizeHist(
                const CvArr* src,
                CvArr* dst
          );

  • 相关阅读:
    axis2 WebService的发布与调用
    Lucene、Compass学习以及与SSH的整合
    qsort函数应用大全
    Effective C++ ——模板和泛型编程
    Effective C++ ——继承与面向对象设计
    Effective C++ ——实现
    Effective C++ ——设计与声明
    Effective C++ ——资源管理
    Effective C++ ——构造/析构/赋值运算符
    Effective C++ ——让自己习惯C++
  • 原文地址:https://www.cnblogs.com/westwind/p/1538590.html
Copyright © 2020-2023  润新知