2) IplImage* cvCloneImage( const IplImage* image );
在使用函数之前,不用内存,即不用。该函数会自己开一段内存,然后复制好image里面的数据,然后把这段内存中的数据返回.
例如
IplImage *src;
IplImage *dst;
dst = cvCloneImage(src);
就是直接把src这个图像复制给dst,不用给dst内存空间了,即不用写dst = cvCreateImage(cvGetSize(src),8,3).
3)void cvErode( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );
src
输入图像.
dst
输出图像.
element
用于腐蚀的结构元素。若为 NULL, 则使用 3×3 长方形的结构元素
iterations
腐蚀的次数
函数 cvErode 对输入图像使用指定的结构元素进行腐蚀,该结构元素决定每个具有最小值象素点的邻域形状:
dst=erode(src,element): dst(x,y)=min((x',y') in element))src(x+x',y+y')
函数可以是本地操作,不需另外开辟存储空间的意思。腐蚀可以重复进行 (iterations) 次. 对彩色图像,每个彩色通道单独处理。
CreateStructuringElementEx 创建结构元素;ReleaseStructuringElement 删除结构元素。
4) void cvAbsDiff( const CvArr* src1, const CvArr* src2, CvArr* dst );
OpenCV 中计算两个数组差的绝对值的函数。
void cvAbsDiff( const CvArr* src1, const CvArr* src2, CvArr* dst );
src1
第一个原数组
src2
第二个原数组
dst
输出数组
函数 cvAbsDiff 计算两个数组差的绝对值
dst(I)c = abs(src1(I)c - src2(I)c).
所有数组必须有相同的数据类型相同的大小(或ROI大小)
对于图像中的某一像素点 P(x, y), 在我们正常的坐标系中,x代表其横坐标,y代表其纵坐标,而在opencv的函数 cvGet2D()与cvSet2D() 中,却行不通。cvGet2D() 的函数原型是 : CvScalar cvGet2D (const CvArr * arr, int idx0, int idx1); 函数返回的是一个CvScalar 容器,其参数中也有两个标的目标的坐标,但跟我们通俗习惯的坐标不一样的是,idx0代表是的行,即高度,对应于我们通俗坐标系的y, idx1代表的是列,即宽度,对应于我们通俗坐标系的x,cvSet2D() 也类似。所以在应用cvSet2D() 与 cvGet2D() 时,切切要重视坐标的次序。
cvGet?D用于获取数组中指定下标的元素值,cvSet?D用于为数组中指定下标的元素赋予值。
以cvGet2D和cvSet2D为例:
CvScalar cvGet2D (const CvArr * arr, int idx0, int idx1);
void cvSet2D (const CvArr * arr, int idx0, int idx1, CvScalar value);
索引值idx0代表数组元素的行下标,idx1代表数组元素的列下标。
与OpenCV中图像坐标系相对应,idx0,idx1表示的是图像上指定高度和宽度值位置处所对应的像素值。
因此,在使用时,需要依照如下的方式进行:
1 for (int y = 0; y < height; y++) { 2 3 for (int x = 0; x < width; x++) 4 5 CvScalar cs = cvGet2D(img, y, x); 6 7 cvSet2D(img, y, x, cs); 8 9 }
12) cvMat
1 #include <highgui.h> 2 3 #include <cv.h> 4 5 int main(int argc, char **argv) 6 7 { 8 9 if (argc != 2) 10 11 return -1; 12 13 /*强制转换为灰度图像*/ 14 15 IplImage *img = cvLoadImage(argv[1], 0); 16 17 cvNamedWindow("example"); 18 19 cvShowImage("example", img); 20 21 cvWaitKey(0); 22 23 cvReleaseImage(&img); 24 25 cvDestroyWindow("example"); 26 27 return 0; 28 29 }
cvResize
函数cvResize 重新调整图像src(或它的ROI),使它精确匹配目标dst(或其ROI)。这里需要说明的是,cvResize可以用来调整3通道图像(如RGB图像)和单通道图像的大小。
void cvResize( const CvArr* src, CvArr* dst, int interpolation );