OpenCV学习笔记基本数据结构

OpenCV学习笔记

OpenCV的全称是OpenSourceComputerVisionLibrary,是一个跨平台的计算机视觉库。其在图像处理。计算机视觉以及模式识别等都有很多的应用领域。

OpenCV的基本数据结构

OpenCV提供了很多种基本数据结构。虽然这些数据类型在C语言中不是基本类型,但结构都很简单。可以在“。。。/OpenCV

/cxcore/include”目录下的cvtypes.h文件中查看其详细定义。

数据类型中最简单的就是CvPoint。CvPoint是一个包含integer类型成员x和y的简单结构体。CvPoint有两个变体类型:CvPoint2D32f和CvPoint3D32f。前者同样有两个成员x,y,但它们是浮点类型;而后者却多了一个浮点类型的成员z。

CvSize类型与CvPoint非常相似,但它的数据成员是integer类型的width和height。如果希望使用浮点类型,则选用CvSize的变体类型CvSize2D32f。

CvRect类型派生于CvPoint和CvSize,它包含4个数据成员:x,y,width和height。(正如你所想的那样,该类型是一个复合类型)。

下一个(但不是最后一个)是包含4个整型成员的CvScalar类型,当内存不是问题时,CvScalar经常用来代替1,2或者3个实数成员(在这个情况下,不需要的分量被忽略)。CvScalar有一个单独的成员val,它是一个指向4个双精度浮点数数组的指针。

OpenCV数据结构图

cvScalar是一个特殊的例子:它有3个构造函数。第一个是cvScalar(),它需要一个、两个、三个或者四个参数并将这些参数传递给数组val[]中的相应元素。第二个构造函数是cvRealScalar(),它需要一个参数,它被传递给给val[0],而val[]数组别的值被赋为0。最后一个有所变化的是cvScalarAll(),它需要一个参数并且val[]中的4个元素都会设置为这个参数。

矩阵和图像类型

主要的是两种IplImage和CvMat。

一、新建一个二维矩阵的例程具有以下原型:

cvMat*cvCreateMat(introws,intcols,inttype);

这里type可以是任何预定义类型,预定义类型的结构如下:CV_(S

U

F)C。于是,矩阵的元素可以是32位浮点型数据(CV_32FC1),或者是无符号的8位三元组的整型数据(CV_8UC3),或者是无数的其他类型的元素。

二、IplImage

在OpenCV解释和处理图像的方式中,width和height这两个变量很重要,其次是depth和nchannals。

对于深度值depth有下面几种类型:

通道数nChannels可取的值是1,2,3或4。

随后两个重要成员是origin和dataOrder。origin变量可以有两种取值:IPL_ORIGIN_TL或者IPL_ORIGIN_BL,分别设置坐标原点的位置于图像的左上角或者左下角。

dataOrder取值可以是IPL_DATA_ORDER_PIXEL或IPL_DATA_ORDER_PLANE,前者指明数据是将像素点不同通道的值交错排在一起(这是常用的交错排列方式),后者是把所有像素同通道值排在一起,形成通道平面,再把平面排列起来。

最后还有一个实用的重要参数——感兴趣的区域(ROI),实际上它是另一个IPL/IPP结构IplROI的实例。IplROI包含xOffset,yOffset,height,width和coi成员变量,其中COI代表channelofinterest(感兴趣的通道)。ROI的思想是:一旦设定ROI,通常作用于整幅图像的函数便会只对ROI所表示的子图像进行操作。如果IplImage变量中设置了ROI,则所有的OpenCV函数就会使用该ROI变量。如果COI被设置成非0值,则对该图像的操作就只作用于被指定的通道上了。不幸的是,许多OpenCV函数都忽略参数COI。

文章内容来源IT问道,感谢名为mpp_king博主的分享,点击原文可看博客内容。

赞赏

长按







































北京哪家治疗白癜风正规
中科UM-D



转载请注明:http://www.92nongye.com/xxmb/204618731.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了