OpenCV常用函数

这里对opencv里面的一些比较常见的函数做了一个归纳,有C接口的,也有C++接口的;更多函数可以查询最新的OpenCV文档

1.cvNormalize
功能:根据某种范数或者数值范围归一化数组.

void cvNormalize( const CvArr* src, CvArr* dst, double a=1, double b=0, int norm_type=CV_L2,const CvArr* mask=NULL );
src: 输入数组
dst: 输出数组,支持原地运算
a: 输出数组的最小/最大值或者输出数组的范数
b:输出数组的最大/最小值
norm_type: 归一化的类型
可以有以下的取值:
CV_C - 归一化数组的C-范数(绝对值的最大值)
CV_L1 - 归一化数组的L1-范数(绝对值的和)
CV_L2 - 归一化数组的(欧几里德)L2-
CV_MINMAX - 数组的数值被平移或缩放到一个指定的范围
mask 操作掩膜,用于指示函数是否仅仅对指定的元素进行操作
该函数归一化输入数组使它的范数或者数值范围在一定的范围内

对于不同的norm_type, 根据(mask=null)的时候, a,b(a>b)起的作用结果如下:
norm_type=CV_C时, src 被重新"缩放"(rescale)到dst, 使得dst的值是线性映射到[0,1]区间.(a,b其实无作用)
norm_type=CV_L1,或者 CV_L2, 得到L1,L2规范化的dst.(a,b其实无作用)
norm_type=CV_MINMAX时, src会被缩放(rescale)和移动(translation)到dst,使得dst的值是线性映射到[b,a]区间.

2.cvConvert

 因为 IplImage 里的数据,你只能用uchar的形式存放,当你需要这些图像数据看作数据矩阵来运算时,0~255的精度显然满足不了要求;

 然而CvMat里却可以存放任意通道数、任意格式的数据,这个机制方便了研究中的这种需求,转化为矩阵就可以进行更自由的计算;

 1  void Show(CvMat* mat)  
 2  {   
 3    CvSize size = cvSize(mat->width,mat->height);   
 4    IplImage* imgBuf = cvCreateImage(size,IPL_DEPTH_8U,1);                          
 5    cvConvert(mat,imgBuf);     
 6    cvNamedWindow("mat",CV_WINDOW_AUTOSIZE);   
 7    cvShowImage("image",mat);   
 8     cvWaitKey(0);   
 9     cvReleaseImage(&imgBuf);  
10  } 

3.cvCopy
void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask=NULL );
在使用这个函数之前你必须用cvCreateImage()一类的函数先开一段内存,然后传递给dst。cvCopy会把src中的数据复制到dst的内存中。

4.cvCloneImage
IplImage* cvCloneImage( const IplImage* image );
在使用函数之前,不用开辟内存。该函数会自己开一段内存,然后复制好image里面的数据,然后把这段内存中的数据返回给你。

5.cvFilter2D

对图像做卷积

void cvFilter2D( const CvArr* src, CvArr* dst, const CvMat* kernel, CvPoint anchor=cvPoint(-1,-1));

src 输入图像.
dst 输出图像.
kernel 卷积核, 单通道浮点矩阵. 如果想要应用不同的核于不同的通道,先用cvSplit函数分解图像到单个色彩通道上,然后单独处理。
anchor 核的锚点表示一个被滤波的点在核内的位置。 锚点应该处于核内部。缺省值 (-1,-1) 表示锚点在核中心。
本函数对图像进行线性滤波,支持 In-place 操作。当核运算部分超出输入图像时,函数从最近邻的图像内部象素差值得到边界外面的象素值。
posted @ 2014-04-03 16:08  Teckee  阅读(1471)  评论(0编辑  收藏  举报