Core_1_数据结构和函数

本文详细介绍了OpenCV中的基本数据结构,包括点、矩形、RotatedRect类等,以及核心图像容器Mat的构成和操作。此外,还讨论了其他矩阵类型、常用矩阵操作函数,如Mat的构造、转换、矩阵运算等,以及图形绘制函数,如circle、line、rectangle等。
摘要由CSDN通过智能技术生成

一基本数据结构

dateType:

unsigned char       signed char         
unsigned short      signed short
double              float                   
bool                int

点的表示:
1>2D表示:

Point_<int>=Point2i=Point
Point_<float>=Point2f
Point_<double>=Point2d
Point po;
po.x  //对应cols
po.y  //对应rows 

2>3D表示:

Point3_<int> =Point3i
Point3_<float>=Point3f
Point3_<double>=Point3d

尺寸的表示:

Size_<int>=Size2i
Size2i=Size
Size_<float>=Size2f

含有成元:width,height //宽度高度

矩形中,相应区域的表示:
1>Rect_类
正立矩阵

Rect_<int>=Rect

含有成元:x,y,width,height(左上角坐标,宽度,高度)
两个矩阵的交集和并集:

Rect rect=rect1 & rect2;//交集
Rect rect=rect1 | rect2;//并集

Rect rect=rect1 + point;//进行矩阵平移到point点
Rect rect=rect1 + size; //把矩阵进行缩放到size

2>RotatedRect类
可旋转矩阵

成员:

Point2f center; //中心点坐标
Size2f  size//尺寸大小
float   angle//角度大小
                 //当角度为0,90,180,270的时候,矩阵正立。 

成员函数:

void RotatedRect::points(Point2f pts[]) const//在pts中存下 RotatedRect四个顶点坐标
Rect boundingRect() const;
//返回最小包围RotatedRect的正立矩阵Rect

小矩阵模板,Matx类;

template <typename _Tp,int m,int n > 
class Matx;
//初始化时,type和size已知

Vec类
向量 Matx的子类:

template <typename _Tp,int n>
class Vec:  public Matx<_Tp,n,1>
//exp:
typedef Vec<uchar, 2> Vec2b;
typedef Vec<float, 3> Vec3f;
//等等

常用于多颜色通道,坐标访问时使用的表示:

Mat imageimage.at<Vec3b>(i,j)[0];

颜色的表示:
Scalar_类,Vec的4元素特例派生类。

typedef Scalar_<double> Scalar;
//常用于函数的实参传递,
//或者将矩阵Mat对象初始化成一个颜色。

一维范围的表示:
Range类
成员

int start,end;//用来表示矩阵的边界范围。

智能指针:
Ptr类
有引用次数,会自动销毁。

Ptr<Mat> mat_ptr;

二基础图像容器Mat

Mat类,由两个数据部分组成:
1> 矩阵头,包含矩阵尺寸,存储方法,存储地址。
2>一个指向存储所有像素值的矩阵的指针。

Mat imageA,imageB;
//拷贝构造函数,只复制信息头和矩阵指针,矩阵不复制
Mat imageC(imageA);
//同样
imageB=imageA;
//对imageA的矩阵操作,同样会对imageB,imageC产生影响

复制矩阵本身采用:

Mat imageB=imageA.clone();
Mat imageC;
imageA.copyTo(imageC);

Mat的像素存储方式:
1>单通道灰度图
2>BGR(A) 蓝色,绿色,红色,(透明颜色)
3> HSV和HLS 色调,饱和度和亮度/透明度
4>YCrCb 存在于JPEG图像中
5>CIE L*a*b 在感知上均匀的颜色,适合用来度量两个颜色之间的距离

对应的type,depth,channels:
CV_[位数][是否带符号][类型前缀]C[通道数]
CV_8UC3 //表示3通道8位,unsigned char型
CV_32FC1 //表示单通道32位,float型

CV_8UC3     //表示3通道8位,unsigned char型
CV_32FC1    //表示单通道32位,float型

创建Mat的方法:
1>直接使用Mat的构造函数

Mat::Mat(int rows, int cols, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值