OpenCV常用的图像和矩阵操作总结
- 格式:doc
- 大小:80.00 KB
- 文档页数:14
OpenCv常用图像和矩阵操作
目录
学习资料 (2)
书籍 (2)
网站: (2)
本地安装目录 (2)
图像IplImage (3)
Structure IplImage (3)
图像的常用操作 (4)
图像载入函数 (4)
窗口定义函数 (4)
图像显示函数 (4)
图像保存函数 (4)
图像销毁函数 (5)
存取图像像素 (5)
简单的方法 (8)
麻烦的方法 (9)
恰当的方法 (12)
cvmSet(M,i,j,; Mb -> Mc
cvDiv(Ma, Mb, Mc); Mb -> Mc
cvAddS(Ma, cvScalar, Mc); Vb -> res
cvCrossProduct(&Va, &Vb, &Vc); 单矩阵操作: (13)
其他 (14)
Shell函数显示图片 (14)
IplImage 到cvMat的转换 (14)
学习资料
书籍
Learning OpenCV(影印版)
作者:Gary Bradski, Adrian Kaehler
出版社:东南大学出版社
学习OpenCV(中文版)
作者:Gary Bradski, Adrian Kaehler
译者:于仕琪刘瑞祯
出版社:清华大学出版社
OpenCV中文教程
作者:刘瑞祯于仕琪
网站:
本地安装目录
在安装目录\docs 下有各种学习资料
只用在本地安装目录下面就可以查询到大部分需要的信息,当然也可以直接百度,google
图像IplImage
Structure IplImage
OpenCv中图像的结构体为IplImage,位于头文件中,IplImage 结构体的定义如下:32F64F只有cvCreateImage可以创建交叉存取图像*/
int origin; /*图像原点位置:0表示顶-左结构,1表示底-左结构*/
int align; /* 图像行排列方式(4 or 8),在OpenCV 被忽略,使用widthStep 代替*/ int width; /* 图像宽像素数*/
int height; /* 图像高像素数*/
struct _IplROI *roi; /* 图像感兴趣区域,当该值非空时,
只对该区域进行处理*/
struct _IplImage *maskROI; /* 在OpenCV中必须为NULL */
void *imageId; /* 同上*/
struct _IplTileInfo *tileInfo; /*同上*/
int imageSize; /* 图像数据大小(在交叉存取格式下
ImageSize=image->height*image->widthStep),单位字节*/
char *imageData; /* 指向排列的图像数据*/
int widthStep; /* 排列的图像行大小,以字节为单位*/
int BorderMode[4]; /* 边际结束模式, 在OpenCV 被忽略*/
int BorderConst[4]; /* 同上*/
char *imageDataOrigin; /* 指针指向一个不同的图像数据结构(不是必须排列的),是为了纠正图像内存分配准备的*/
} IplImage;}
IplImage;
参数widthStep包括相邻行的同列点之间的字节数。仅凭变量width是不能计算这个值的,因为为了处理过程更高效每行都会用固定的字节数来对齐;因此在第i行末和第i+1行开始处可能会有些冗于字节。参数imageData包含一个指向第一行图像数据的指针。如果图像中有些独立的平面(如当dataOrder = IPL_DATA_ORDER_PLANE)那么把它们作为单独的图像连续摆放,总行数为height和nChannels的乘积。但通常情况下,它们是交错的,使得行数等于高度,而且每一行都有序地包含交错的通道。
ROI-- 感兴趣的区域(ROI),实际上它是另一个IPL/IPP 结构IplROI的实例。IplROI 包含xOffset,yOffset,height,width和coi成员变量,其中COI代表channel of interest(感兴趣的通道)。ROI的思想是:一旦设定ROI,通常作用于整幅图像的函数便会只对ROI 所表示的子图像进行操作。如果IplImage变量中设置了ROI,则所有的OpenCV函数就会使用该ROI变量。如果COI被设置成非0值,则对该图像的操作就只作用于被指定的通道上了。不幸的是,许多OpenCV函数都忽略参数COI。
图像的常用操作
图像载入函数
函数cvLoadImage载入指定图像文件,并返回指向该文件的IplImage指针。函数支持bmp、jpg、png、tiff等格式的图像。其函数原型如下:
IplImage* cvLoadImage( const char* filename, int iscolor);
其中,filename 是待载入图像的名称,包括图像的扩展名;iscolor是一个辅助参数项,可选正数、零和负数三种值,正数表示作为三通道图像载入,零表示该图像作为单通道图像,负数表示载入图像的通道数由图像文件自身决定。
窗口定义函数
函数cvNamedWindow定义一个窗口,用于显示图像。其函数原型如下:
int cvNamedWindow( const char* name, unsigned long flags );
其中,name是窗口名,flags是窗口属性指标值,可以选择CV_WINDOW_AUTOSIZE 和0两种值。CV_WINDOW_AUTOSIZE表示窗口尺寸与图像原始尺寸相同,0表示以固定的窗口尺寸显示图像。
图像显示函数
函数cvShowImage是在指定的窗口中显示图像,其函数原型如下:
void cvShowImage( const char* name, const CvArr* image );
其中,name是窗口名称,image是图像类型指针,一般是IplImage指针。
图像保存函数
函数cvSaveImage以指定的文件名保存IplImage类型的指针变量,其函数原型如下:int cvSaveImage( const char* filename, const CvArr* image );
其中,filename是图像保存路径和名称,image是IplImage指针变量。
Trick:
如果要保存一组图像到result文件夹,图像个数为n,保存名称按照一定的序号递增,假设为,,,,…, ,则
操作为:
char * f[30];
for(int i=0; i {