opencv(2)数据结构

opencv的基础结构在cxcore文件中,主要结构有:

opencv主要结构
1~7的定如下:
opencv基本数据 

1.类型的初始化话方法:

ipl数据结构
opencv主要结构

可以用于多通道矩阵,如果使用的图像是1通道的,则pt.val[0]中存储数据 ,如果使用的图像是3通道的,则pt.val[0],pt.val[1],pt.val[2]中存储数据。

2.

CvArr,它只是一个Interface,在"cxtype.h"被定义为 typedef void CvArr;用于指示函数接收的数组类型可以不止一个,如 IplImage*, CvMat* 甚至 CvSeq*. 最终的数组类型是在运行时通过分析数组头的前4 个字节判断。 opencv数据类型的继承关系(很类似C++):

image

3.矩阵类型CvMat

CvMat结构

内部使用了union的共用体,也就是说访问的时候可以使用里面的任何一种,尤其是data分为不同的数据类型,访问的时候是需要注意的。

矩阵操作

CvMat操作

矩阵访问(链接可以参考更全的),如果对于单个元素的访问,使用指针式最好的办法,如果是访问整行或者整列,或者是多通道数据的访问,使用opencv提供的函数,更为快捷一些:

CvMat访问函数

对于特殊矩阵的访问,这里没做介绍,我本人用的比较少

3.图像类型 IplImage

ipl数据结构

里面比较关键的变量:

nChannels: 1 2 3,黑白为1通道,24位彩色图像为3通道
depth:一般是IPL_DEPTH_8U,如果需要做精确处理,可以将图像转换为浮点矩阵,处理完在转换回来
origin (只控制显示的方式,并不改变里面数据的保存方式)
width,height
roi:需要使用ROI是使用
imageData:需要注意的是char类型指针,在访问的时候要注意转换为uchar类型
widthStep  也就是行对齐后的量,比如说bmp图像,行必须是4的整倍数
图像的基本操作
ipl数据结构

对于子图像的操作,一方面可以讲图像装换为矩阵,然后通过矩阵的相关函数来操作,转换可以这样做:
ipl数据结构


也可以通过ROI来进行操作:

 先说这么多吧,虽然话费这么长时间来整理,也蛮好费时间的,不过收获有的,后面主要对图像处理的过程进行说明

 

转载请注明地址:http://www.cnblogs.com/zsb517/admin/EditPosts.aspx?postid=2533546
作者:深夜孤灯


原文地址:https://www.cnblogs.com/zsb517/p/2533546.html