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。
蓝色表示v_next,绿色表示h_next
method:边缘近似方法(除了CV_RETR_RUNS使用内置的近似,其他模式均使用此设定的近似算法)。可取值如下:offset:偏移量,用于移动所有轮廓点。当轮廓是从图像的ROI提取的,并且需要在整个图像中分析时,这个参数将很有用。
2. cvMoveWindow
该函数为开放计算机视觉(OpenCV)库库函数,设定窗口的位置。
定义:
void cvMoveWindow( constchar* name, int x, int y );
参数:
3.cvResizeWindow
该函数为开放计算机视觉(OpenCV)库库函数,设定窗口大小。
定义:
voidcvResizeWindow( const char* name, int width, int 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);
参数:
6.cvPyrUp
opencv库中函数用于图像的上采样
void cvPyrUp( const CvArr* src, CvArr* dst, intfilter=CV_GAUSSIAN_5x5 );
src
输入图像
.
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原数组.