摘要:
使用 Mat 类,内存管理变得简单,不再像使用 IplImage 那样需要自己申请和释放内存。虽然不了解 Mat 的内存管理机制,也无碍于 Mat 类的使用,但是如果清楚了解 Mat 的内存管理,会更清楚一些函数到底操作了哪些数据。 Mat 是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸,存储方 阅读全文
摘要:
Mat_类是对 Mat 类的一个包装,其定义如下: template<typename _Tp> class Mat_ : public Mat { public: //只定义了几个方法 //没有定义新的属性 }; 这是一个非常轻量级的包装, 既然已经有 Mat 类, 为何还要定义一个 Mat_?下 阅读全文
摘要:
利用C++中的运算符重载,Opencv2中引入了Mat运算表达式。这一新特点使得使用c++进行编程时,就如同写Matlab脚本。 例如: 如果矩阵A和B大小相同,则可以使用如下表达式: C=A+B+1; 其执行结果是A和B的对应元素相加,然后再加1,并将生成的矩阵赋给C变量。 下面给出 Mat 表达 阅读全文
摘要:
Mat 类提供了多种方便的方法来选择图像的局部区域。 使用这些方法时需要注意,这些方法并不进行内存的复制操作。如果将局部区域赋值给新的 Mat 对象,新对象与原始对象共用相同的数据区域,不新申请内存,因此这些方法的执行速度都比较快。 1、单行或单列选择 2、用Range选择多行或者多列 Range 阅读全文
摘要:
如果你熟悉 C++的 STL 库,那一定了解迭代器(iterator)的使用。迭代器可以方便地遍历所有元素。Mat 也增加了迭代器的支持,以便于矩阵元素的遍历。下面的例程功能跟上一节的例程类似,但是由于使用了迭代器,而不是使用行数和列数来遍历,所以这儿没有了 i 和 j 变量,图像的像素值设置为一个 阅读全文
摘要:
一、四个坐标系简介和相互转换 相机模型为以后一切标定算法的关键,只有透彻的理解了,对以后的标定算法才有更好的理解。 首先要理解相机模型中的四个平面坐标系的关系:像素平面坐标系(u,v)、像平面坐标系(图像物理坐标系(x,y))、相机坐标系(xc,yc,zc)和世界坐标系(Xw,Yw,Zw)。 我们通 阅读全文
摘要:
很多时候, 我们需要读取某个像素值, 或者设置某个像素值; 在更多的时候,我们需要对整个图像里的所有像素进行遍历。OpenCV 提供了多种方法来实现图像的遍历。 1、at()函数 函数 at()来实现读取矩阵中的某个像素,或者对某个像素进行赋值操作。下面两行代码演示了 at()函数的使用方法。 如果 阅读全文
摘要:
1、对于单通道图像,其元素类型一般为 8U(即 8 位无符号整数) ,当然也可以是 16S、32F 等;这些类型可以直接用 uchar、short、float 等 C/C++语言中的基本数据类型表达。 2、如果多通道图像,如 RGB 彩色图像,需要用三个通道来表示。在这种情况下, 如果依然将图像视作 阅读全文
摘要:
Mat 是一个非常优秀的图像类,它同时也是一个通用的矩阵类,可以用来创建和操作多维矩阵。有多种方法创建一个 Mat 对象。 1、构造函数方法 下面是一个使用构造函数创建对象的例子。 常用的构造函数 2、使用create()函数创建对象 除了在构造函数中可以创建图像,也可以使用 Mat 类的 crea 阅读全文