OpenCv2 学习笔记(4) OpenCv基本的数据类型

原文地址

1、Point_

可以理解为二维点,包括下面的int、float和double3三种类型的二维点。

可以有其他的的二维数据结构构造,如老版本中的CvPoint、CvPoint2D32f,以及后续的Size和Vec<_Tp,2>,另外还有成员函数,点乘dot()、叉乘cross(),检查点是否在矩形内部inside()。

点与点、点与数值可以进行直接运算。

2、Point3_

Point3_和Point2_类似,是三维点。

3、Size_

二维尺寸,用来描述矩阵大小、矩形区域大小、宽高等。

同Point2_一样,可以通过二维数据类型CvSize、CvSize2D32f等构造,成员变量有 width和height;还能计算面积area()=height*width。

4、Rect_

二维矩形,有效类型为 typedef Rect_<int> Rect; 该数据类型由顶点x,y和尺寸width、height定义。

构造函数比较多,Rect(x,y,width,height)和Rect_( Rect )、Rect_( CvRect )结构上是一样的,4个参数;还可以用2个参数构造,顶点x,y这两个可以用Point表示,height和width可以用Point或Szie表示。

成员函数可以返回左上角tl()和右下角br()的二维点坐标,还有面积area(); 和Point对应,能够检查矩形内是是否有点contains()。

5、Matx

小矩阵,是一个模板类,便于构造。

6、Vec

小向量,派生于Matx<_Tp, n, 1>,即 列向量。

Vec对象可以和其它结构互相转化,如 Vec<T, 2> <=> Point_ ,Vec<T, 3> <=> Point3_ ,Vec<T, 4> <=> CvScalar / Scalar_。 可以用“[ ]”操作符获取Vec的元素。另外,Vec经常用于描述多通道矩阵的一个像素,如 Mat m(10,10, CV_32FC3,Scalar(0,0,0) ),取(4,5)这个元素m.at<Vec2f>(4,5) ,这个像素各通道的值可以通过m.at<Vec2f>(4,5)[ i ]得到 。

Vec的运算有: v1 = v2 + v3、v1 = v2 - v3、v1 = v2 * scale、v1 = scale * v2、v1 = -v2、v1 += v2 ,v1 == v2、v1 != v2, norm(v1) (欧式距离)等。

7、Scalar_

标量,由Vec<_Tp, 4>模板类派生。在矩阵运算中,特别是图像矩阵涉及到多通道的运算中,对某个像素素的取值和赋值都是多个通道同时进行,因此Vec和Scalar的优势体现明显,被广泛用于图像像素赋值。

既然Scalr_是从Vec派生,那么其元素的取值也是通过“[ ]”运算符操作的,例如,在 s = sum(Mat(m*m.t())) 运算中,sum返回值s是Scalar(693,0,0,0),是包含4个元素的向量,那么结果的取值方法为 double res= s[0]。

图像像素赋值,如 Mat(10, 10, CV_32FC2, Scalar(1,2) ),由于是2个通道,因此Scalar只需要2个数值;由于Scalar是一个4行1列的列向量,因此最多只能给4个通道的图像矩阵像素赋值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值