《学习OpenCV》随笔——第3章 初探OpenCV

CvPoint这个类型和MFC以及Qt中的相应结构很类似,都是integer类型的x,y。但是它的变体类型是CvPoint2D32f和CvPoint3D32f。前者也是有两个成员,但是是浮点类型的。后者是浮点类型的,而且多了一个z。

CvSize这个类型和CvPoint很相似。在这一章的最后,给出了上述两个类型的C语言定义。CvSize数据成员是integer类型的width和height,如果希望使用浮点类型,可以使用CvSize2D32f。CvRect类型派生于CvPoint和CvSize,包含4个成员,x,y,width,height。

CvScalar包含4个整型成员,CvScalar有一个单独的成员val,它是一个只想4个双精度浮点数数组的指针即double val[4]。这个类型很重要,之后的很多矩阵操作函数中都有他的身影。

CvArr-》CvMat-》IplImage。这里属于依次派生,即CvArr作为剩下两个的父类。在这里和C++很相似,体现了极其浓烈的面向对象编程的思想。因此,我们看到形参表中需要CvArr*类型参数时,就可以考虑将这两者带入,这样就可以进行一系列操作。

OpenCv矩阵的概念相对于线性代数更为抽象,尤其是矩阵的元素,并非只能取数值类型。

矩阵由宽度,高度,类型,行数据长度(step,行的长度用字节表示而不是整形或者浮点型长度)和一个指向数据的指针构成。

typedef struct CvMat
{
int type;
int step;
int *refcount;
union
{
uchar*ptr;
short* s;
int * i;
float* fl;
double *db;
}data;
union
{
int rows;
int height;
};
union
{
int cols;
int width;
};
}CvMat;

上述代码就是CvMat的类型结构,我们可以看到,这其中有三个联合体,在32位系统中,sizeof(CvMat)=24。

矩阵有多种创建方法,最常见的方法是用cvCreateMat()这个函数进行创建。它由多个原函数组成,例如,cvCreateMatHeader()和cvCreateData()。cvCreateMatHeader()函数创建CvMat结构,不为数据分配内存,二cvCreateData()函数只负责数据的内存分配。有时,只需要函数cvCreateMatHeader(),因为已因其他理由分配了存储空间,或因为还不准备分配存储空间。第三种方法使用函数cvCloneMat(CvMat*),他依据一个现有矩阵创建一个新的矩阵。当这个矩阵不再需要时,可以调用函数cvReleaseMat(CvMat*)释放它。上述的几个函数,在手册中基本上就是这个意思。

查询矩阵,我们可以使用函数cvGetElemType(const CvArr* arr),cvGetDims(const CvArr*arr,int *size=NULL)和cvGetDimSize(const CvArr*,int index),第一个返回一个整型常数,表示存储在数组里的元素类型。第二个取出数组以及一个可选择的整形指针,他返回维数,如果整型指针不为空,它将存储对应数组的高度和宽度。最后的函数通过一个指示维数的整型数简单地返回矩阵在那个位数上矩阵的大小。

矩阵数据的存取

宏CV_MAT_ELEM(),传入矩阵、待提取的元素的类型、行和列数4个参数,返回提取出的元素的值。

时间: 2024-10-06 11:34:57

《学习OpenCV》随笔——第3章 初探OpenCV的相关文章

[转]第四章 使用OpenCV探测来至运动的结构——Chapter 4:Exploring Structure from Motion Using OpenCV

仅供参考,还未运行程序,理解部分有误,请参考英文原版. 绿色部分非文章内容,是个人理解. 转载请注明:http://blog.csdn.net/raby_gyl/article/details/17471617 Chapter 4:Exploring Structure from  Motion Using OpenCV 在这一章,我们将讨论来至运动结构(Structure from Motion,SfM)的概念,或者从一个运动的相机拍摄到的图像中更好的推测提取出来的几何结构,使用OpenCV的

OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建

# OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-homebrew安装 2.2-使用homebrew安装CMake 2.3-源码安装OpenCV 2.4-xcode配置与测试 2.5-基础问题回答 3-资料 1-学习目标 1.1-本章介绍 因为不可抗力(╯﹏╰),最近去图书馆借了一本<OpenCV编程案例详解>,准备学习OpenCV的使用,因为身患懒癌

【OpenCV入门教程之十七】OpenCV重映射 &amp; SURF特征点检测合辑

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本: 2.4.9 本篇文章中,我们一起探讨了OpenCV中

【OpenCV新手教程之十七】OpenCV重映射 &amp;amp; SURF特征点检測合辑

本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本号: 2.4.9 本篇文章中,我们一起探讨了OpenCV

Abby&#39;s 学习php5随笔

2017.6.27 Abby's cakephp2 学习之旅 下载了XAMPP集成开发环境,然后配置其数据库,参考学习教程, 1.建立表单. 配置完信息如下,Cache Apache默认在windows下是system用户,所以权限最高,但xampp集成环境中的apache确是administor 如何更改apache用户为system 静默开发.(一种开发方法,番茄ToDo中的学霸模式有些相似) 如何设置.ctp的显示 http://cakephp2.local/posts/index怎么就可

20145320《Java程序设计》第3周学习总结(第四章)

20145320<Java程序设计>第3周学习总结(第四章) 教材学习内容总结 对象(Object):存在的具体实体,具有明确的状态和行为 类(Class):具有相同属性和行为的一组对象的集合,用于组合各个对象所共有操作和属性的一种机制 从类看对象:类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象 从对象看类:类的产生,是从少数实例,推广到大量相似实例的抽象化过程(abstraction) 类是对象的设计图,对象是类的实例,生成对象要先定义类 4.1 类与对象 定义类使用c

学习java随笔第八篇:封装、继承、多态

java和c#一样都是面向对象的语言. 面向对象的语言有三大特征:封装.继承.多态 封装 封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别. class Person2 { private String name; public void setName(String name) { this.name=name; } public String getName() { return name; } private String sex; public voi

《深入Java虚拟机学习笔记》- 第4章 网络移动性

Java虚拟机学习笔记(四)网络移动性 <深入Java虚拟机学习笔记>- 第4章 网络移动性,布布扣,bubuko.com

《深入Java虚拟机学习笔记》- 第7章 类型的生命周期

一.类型生命周期的开始 如图所示 初始化时机 所有Java虚拟机实现必须在每个类或接口首次主动使用时初始化: 以下几种情形符合主动使用的要求: 当创建某个类的新实例时(或者通过在字节码中执行new指令,或者通过不明确的创建.反射.克隆和反序列化): 当调用某个类的静态方法时(即在字节码中执行invokestatic指令): 当使用某个类或接口的静态字段,或者对该字段赋值时(用final修饰的静态字段除外,它被初始化为一个编译时常量表达式): 当调用Java API中的某些反射方法: 当初始化某个