图像处理_常用函数_OpenCV

1.cvFindContours

         函数cvFindContours从二值图像中检索轮廓,并返回检测到的轮廓的个数。first_contour的值由函数填充返回,它的值将为第一个外轮廓的指针,当没有轮廓被检测到时为NULL。其它轮廓可以使用h_next和v_next连接,从first_contour到达。

int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour,
                    int header_size=sizeof(CvContour), int mode=CV_RETR_LIST,
                    int method=CV_CHAIN_APPROX_SIMPLE, CvPoint offset=cvPoint(0,0) );

       image:8比特单通道的源二值图像。非零像素作为1处理,0像素保存不变。从一个灰度图像得到二值图像的函数有:cvThreshold,cvAdaptiveThreshold和cvCanny。
       storage:返回轮廓的容器。
       first_contour:输出参数,用于存储指向第一个外接轮廓。
       header_size:header序列的尺寸.如果选择method = CV_CHAIN_CODE, 则header_size >= sizeof(CvChain);其他,则header_size >= sizeof(CvContour)。
       mode:检索模式,可取值如下:
          (1)CV_RETR_EXTERNAL:只检索最外面的轮廓;
          (2)CV_RETR_LIST:检索所有的轮廓,并将其放入list中;
          (3)CV_RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是各部分的外部边界,第二层是空洞的边界;
          (4)CV_RETR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次。

                                    

                                          蓝色表示v_next,绿色表示h_next

       method:边缘近似方法(除了CV_RETR_RUNS使用内置的近似,其他模式均使用此设定的近似算法)。可取值如下:
          (1)CV_CHAIN_CODE:以Freeman链码的方式输出轮廓,所有其他方法输出多边形(顶点的序列)。
          (2)CV_CHAIN_APPROX_NONE:将所有的连码点,转换成点。
          (3)CV_CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部分,也就是,函数只保留他们的终点部分。
          (4)CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS:使用the flavors of Teh-Chin chain近似算法的一种。
          (5)CV_LINK_RUNS:通过连接水平段的1,使用完全不同的边缘提取算法。使用CV_RETR_LIST检索模式能使用此方法。

       offset:偏移量,用于移动所有轮廓点。当轮廓是从图像的ROI提取的,并且需要在整个图像中分析时,这个参数将很有用。

2. cvMoveWindow

        该函数为开放计算机视觉(OpenCV)库库函数,设定窗口的位置。
  定义:  

void cvMoveWindow( constchar* name, int x, int y );
  参数:
  name 将被设置的窗口的名字。 
  x 窗口左上角的x坐标。 
  y 窗口左上角的y坐标。 
     函数cvMoveWindow改变窗口的位置。

3.cvResizeWindow

  该函数为开放计算机视觉(OpenCV)库库函数,设定窗口大小。
  定义:

voidcvResizeWindow( const char* name, int width, int height );
  参数:
    name 将被设置窗口的名字。 
    width 新的窗口宽度。 
    height 新的窗口高度。

4.void cvSmooth

void cvSmooth( const CvArr* src,CvArr* dst,int smoothtype=CV_GAUSSIAN,
               int param1=3, int param2=0, doubleparam3=0 ,double param4=0);

        src:输入图像.
        dst:输出图像.
        smoothtype:平滑方法
        平滑方法
             (1)CV_BLUR_NO_SCALE (简单不带尺度变换的模糊)- 对每个象素的 param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数 cvIntegral 计算积分图像。
             (2)CV_BLUR (simple blur) - 对每个象素param1×param2邻域 求和并做尺度变换1/(param1.param2).
             (3)CV_GAUSSIAN (gaussian blur) - 对图像进行核大小为param1×param2 的高斯卷积
             (4)CV_MEDIAN (median blur) - 对图像进行核大小为param1×param1 的中值滤波(i.e. 邻域是方的).
             (5)CV_BILATERAL (双向滤波) - 应用双向 3x3 滤波,彩色sigma=param1,空间sigma=param2. 平滑操作的第一个参数.
        param2:平滑操作的第二个参数. 对于简单/非尺度变换的高斯模糊的情况,如果param2的值为零,则表示其被设定为param1。
        param3:对应高斯参数的 Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算:
        sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 对应水平核,n=param2 对应垂直核.
        对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小有 sigma 计算 (以保证足够精确的操作).函数 cvSmooth 可使用上面任何一种方法平滑图像。每一种方法都有自己的特点以及局限。没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSobel和cvLaplace相似)和32位浮点数到32位浮点数的变换格式。简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特和 32-比特浮点图像。这两种方法可以(in-place)方式处理图像。中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以 in-place 方式处理图像.
 
注解:
     (1)可能大家对CvArr的理解不是很深刻,可以将其看做C++中的基类,当然也包括IplImage
     (2)smooth支持的类型:
             CV_BLUR简单模糊 对每个像素param1,param2求和,并缩放1/(param1*param2),亦即求简单平均值
             CV_BLUR_NO_SCALE简单无缩放变化的模糊 对每个像素param1,param2求和 特别说明的是输入图像和结果图像必须有不同的数值精度,以保证不会发生溢出,如果源图像是8u,则结果图像必须是16s或者32s
             CV_MEDIAN中值模糊 取中心像素的正方形领域类的每个像素的值用中间值代替
             CV_GAUSSIAN高斯模糊 param3为零时,高斯卷积核sigma通过以下公式计算
             sigma(x)= (n(x)/2-1)*0.30+0.80,n(x)=param1
             sigma(y)= (n(y)/2-1)*0.30+0.80,n(y)=param2
       如果第四个参数指定,则第三个和第四个参数分别表示sigma的水平方向和垂直方向的值;如果第三个,第四个参数已经指定,而前两个参数为0,那么窗口的尺寸由sigma确定
             CV_BILATERAL双向滤波 因为高斯模糊是在图像在空间内的像素是缓慢变化的,但随机的两个点可能形成很大的像素差,高斯滤波在保留信号的条件下减少噪声,但在接近边缘的地方无效,双向滤波可以解决这个问题,但需要更多的时间代价,其需要两个参数,param1表示空域中所使用的高斯核的宽度,param2表示颜色域高斯核的高度。


5.cvPyrDown
     功能:
              函数cvPyrDown使用Gaussian金字塔分解对输入图像向下采样。
     格式:

voidcvPyrDown(const CvArr*src,CvArr*dst,int filter=CV_GAUSSIAN_5x5);
     参数:
             src 输入图像。
             dst 输出图像,其宽度和高度应是输入图像的一半。
             filter 卷积滤波器类型,目前仅支持CV_GAUSSIAN_5x5。

6.cvPyrUp

         opencv库中函数用于图像的上采样 

void cvPyrUp( const CvArr* src, CvArr* dst, intfilter=CV_GAUSSIAN_5x5 );
         src  输入图像
         dst 
输出图像 , 宽度和高度应是输入图像的 2  
         filter 
卷积滤波器的类型,目前仅支持 CV_GAUSSIAN_5x5 
      函数 cvPyrUp 使用 Gaussian 金字塔分解对输入图像向上采样。首先通过在图像中插入偶数行和偶数列,然后对得到的图像用指定的滤波器进行高斯卷积,其中滤波器乘以 4 做插值。所以输出图像是输入图像的 4 倍大小。

7.cvRunningAvg

       作用:用来更新移动平均。

       函数形式:

void cvRunningAvg(const CvArr * image, CvArr* acc, double alpha,const CvArr* mask=NULL)

       参数说明:
             image:输入图像,1或3通道,8比特或32比特的float型
             acc:累加器,和image一样大小
             alpha:更新时,image所占的权重
             mask:操作符掩码
                           if mask(x,y)!= 0(1-alpha)*acc(x,y)+alpha*image(x,y) =>acc(x,y)
8.Flip
         垂直,水平或即垂直又水平翻转二维数组

void cvFlip(const CvArr* src, CvArr* dst=NULL, int flip_mode=0);
         src原数组.
         dst目标责任制数组.如果 dst = NULL 翻转是在内部替换.
         flip_mode指定怎样去翻转数组。
         flip_mode = 0 沿X-轴翻转, flip_mode >0 (如 1) 沿Y-轴翻转, flip_mode < 0 (如 -1) 沿X-轴和Y-轴翻转.
 

你可能感兴趣的:(opencv,常用函数,图像处理)