[TOC]

概述

文章参考:https://blog.csdn.net/iracer/article/details/51292349

概述

OpenCV中强大的Mat类型大家已经比较熟悉了。这里梳理一些在工程中其他经常用到的几种基本数据类型。包括:

1
2
3
4
5
6
7
8
9
10
11
Vec

Scalar

Point

Size

Rect

RotatedRect

Vec类

基本概念

Vec是一个模板类,主要用于存储数值向量。

可用它来定义任意类型的向量

1
Vec<double, 8> myVector;  //定义一个存放8个double型变量的向量

使用[]访问Vec向量成员

1
myVector[0]=0;

可使用以下预定义的类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
typedef Vec<uchar, 2> Vec2b;
typedef Vec<uchar, 3> Vec3b;
typedef Vec<uchar, 4> Vec4b;
typedef Vec<short, 2> Vec2s;
typedef Vec<short, 3> Vec3s;
typedef Vec<short, 4> Vec4s;
typedef Vec<int, 2> Vec2i;
typedef Vec<int, 3> Vec3i;
typedef Vec<int, 4> Vec4i;
typedef Vec<float, 2> Vec2f;
typedef Vec<float, 3> Vec3f;
typedef Vec<float, 4> Vec4f;
typedef Vec<float, 6> Vec6f;
typedef Vec<double, 2> Vec2d;
typedef Vec<double, 3> Vec3d;
typedef Vec<double, 4> Vec4d;
typedef Vec<double, 6> Vec6d;

Vec支持的运算如下:

1
2
3
4
5
6
7
8
v1 = v2 + v3
v1 = v2 - v3
v1 = v2 * scale
v1 = scale * v2
v1 = -v2
v1 += v2
v1 == v2, v1 != v2
norm(v1) (euclidean norm)

示例代码

向量定义与元素的访问

1
2
3
4
5
6
7
// Vec
cv::Vec<double, 8> myVector;
for(int i=0; i<myVector.rows;i++)
myVector[i] = i;
cout<<"myVector= "<<myVector<<endl;
cout<<"myVector[0]= "<<myVector[0]<<endl;
cout<<"myVector[3]= "<<myVector[3]<<endl;