第一天:Mat类基础

来源:互联网 发布:泰拉瑞亚骸骨魔弓数据 编辑:程序博客网 时间:2024/05/24 06:15

(一)、OpenCV常用数据结构

1)、Point类

Point类数据结构表示二维坐标系的点,由坐标x, y指定的2D点,如:

Point pt;

pt.x = 20;

pt.y = 10;

其他类型:

Point

Point2d

Point2f

Point2i

Point3d

Point3f

Point3i

2)、Rect类

Rect类用来表示矩形,成员有x,y, width, height,常用的成员函数:

Size()返回值Size表示大小 tl()返回左上角坐标

area()返回矩形面积 br()返回右下角坐标

contains(Point)判断点是否在矩形内

Inside(Rect)判断矩形是否在该矩形内

求两个矩形的交集并集:

Rect rect = rect1 & rect2;

Rect rect = rect1 | rect2;

3)、Size类

Size表示区域大小,常用构造函数Size(int _width, int _height)

4)、Scalar类

Scalar()表示具有四个元素的数组,大量用来传递像素值,如RGB颜色,一般形式:

Scalar(double B, double G, double R, double Alpha)

如果用不到第四个则表示Scalar(B, G, R), 其中:

B—表示蓝色分量,G—表示绿色分量

R—表示红色分量,Alpha—表示透明度

注意:Scalar表示颜色顺序为BGR

Scalar(255, 0, 0) ----表示纯蓝色

Scalar(0, 255, 0) ----表示纯绿色

Scalar(0, 0, 255) ----表示纯红色

Scalar(255, 255, 0) ----表示青色

Scalar(0, 255, 255) ----表示黄色

(二)、Mat类

1)、基础图像容器Mat

我们可以借助很多方法来获取图像,但是存储到数字设备中记录的确实每个像素点的数值。

opencv2.x以上版本提供Mat结构来存储图像,优化了内存管理,不用手动开辟空间,也不必在不使用的时候立即释放,减少内存泄漏的风险。

2)、Mat类简介:

Mat是一个类,由两个数据部分组成:矩阵头(大小,通道,数据类型等)和数据块(像素值)。

Mat头部属性如:rows,cols,channels,data

data是一个指向数据块的指针,可以用如下方法判断图像是否为空:

if(!img.data) //图像数据为空return; 

3)Mat类操作

a、Mat类创建

Mat img; //创建无初始化矩阵Mat img1(20,10,CV_8UC1); //创建20行10列类型为8位的单通道矩阵Mat img2(Size(20,10),CV_8UC3); //创建20*10类型为8位的3通道矩阵Mat img3(20,10,CV_8UC3,Scalar(0,255,0)); //创建10*20类型为8位的3通道矩阵Mat img4(20,10,CV_8UC1,Scalar(255)); //创建10*20类型为8位的单通道矩阵Mat img5(img4);


b、Mat类赋值拷贝
Mat img(100, 200, CV_8UC3, Scalar(0,255,0));

和原图像指向同一块数据:

Mat img2(img); Mat img3 = img; 
原图像的副本:
Mat img4 = img.clone();Mat img 5;img.copyTo(img5);

c、常用颜色空间
RBG颜色空间、HSV/HLS颜色空间、Lab颜色空间
转换所用函数cvtColor(src, dst, code)
CV_BGR2GRAY、CV_BGR2HSV、CV_BGR2Lab


(三)、颜色

RBG颜色空间,R/G/B取值范围[0,255]


HSV/HLS颜色空间,H取值范围[0,360],S/V取值范围[0,1]


Lab颜色空间,L取值范围[0,100],a/b取值范围[127,-128]


原创粉丝点击