OpenCV常用的图像IplImage和矩阵CvMat操作总结

本文总结了OpenCV中图像结构体IplImage的关键成员变量及其作用,包括nChannels、depth和origin等。同时,介绍了OpenCV的图像载入、显示、保存和销毁等基本操作,以及CvMat矩阵结构体的使用,包括矩阵的创建、初始化、元素存取和数学运算等。
摘要由CSDN通过智能技术生成

1)结构体IplImage

OpenCv中图像的结构体为IplImage,位于头文件cxcore.h中,IplImage结构体的定义如下:


typedef struct _IplImage

  {

  int nSize; /* IplImage大小 */

  int ID; /* 版本 (=0)*/

  int nChannels; /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */

  int alphaChannel; /* 被OpenCV忽略 */

  int depth; /* 像素的位深度,主要有以下支持格式:

 IPL_DEPTH_8U, IPL_DEPTH_8S,IPL_DEPTH_16U,IPL_DEPTH_16S, IPL_DEPTH_32S,

   IPL_DEPTH_32F 和IPL_DEPTH_64F */

  char colorModel[4]; /* 被OpenCV忽略 */

  char channelSeq[4]; /* 同上 */

  int dataOrder; /* 0 - 交叉存取颜色通道, 1 - 分开的颜色通道.

   只有cvCreateImage可以创建交叉存取图像 */

  int origin; /*图像原点位置: 0表示顶-左结构,1表示底-左结构 */

  int align; /* 图像行排列方式 (4or 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;

主要的成员变量有。

nChannels : 图像的通道数目,即灰度图像:nChannels= 1; RGB图像nChannels= 3

depth:每个像素值的数据类型和所占的存储空间

origin变量可以有两种取值:IPL_ORIGIN_TL 或者 IPL_ORIGIN_BL,分别设置坐标原点的位置于图像的左上角或者左下角。在计算机视觉领域,一个重要的错误来源就是原点位置的定义不统一。具体而言,图像的来源、操作系统、编解码器和存储格式等因素都可以影响图像坐标原点的选取。举例来说,你或许认为自己正在从图像上面的脸部附近取样,但实际上却在图像下方的裙子附近取样。避免此类现象发生的最好办法是在最开始的时候检查一下系统,在所操作的图像块的地方画点东西试试。

dataOrder:   多通道的数据存储方式,dataOrder=0是交叉通道存储方式,即BGRBGRBGRBGR的方式存储;dataOrder=1是采用独立通道方式存储,即RRRRRRR。。。,GGGGGGG…,BBBBBB…,一般都是BGRBGRBGR的这种交叉存储方式,cvCreateImage生成的图像也是这种存储方式。

   width:      图像的宽度

   height:      图像的高度

   imageData:  图像的像素矩阵

    widthStep:   每一行像素所占的字节数目. 参数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。


2)图像载入函数     cvLoadImage

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值