zoukankan      html  css  js  c++  java
  • OpenCV基础类型

    一、(像素)点(x,y)类型

    1.1 C语言 CvPoint结构体

    CvPoint 类型是一个包含两个int类型的结构体;通常表示某像素点的坐标位置(x,y)

    两个变体类型:

    CvPoint2D32f表示该点坐标(x,y)的数据类型时浮点型;

    CvPoint3D32f表示该点坐标(x,y,z)的数据类型时浮点型;

    1.2 C++语言  Point类

    通过模板结构实现,重载了向量vector类代数操作和组合操作

    针对二维和三维存在两种模板结构体Point,数据类型可以为int 或者 float等等

    点类型最大的好处是简单开销小,我们很少对点类型数据进行数据操作,而是用于转换为更多其他的结构类型,例如向量类或者矩阵类;

    点类型声明:Point+维度+类型

    1 b- unsigned char
    2 s- short int
    3 i- 32-bit int
    4 f- 32-bit float
    5 d- 64-bit float
    类型表示

    Point类的操作:

     1 默认构造    Point2i p1;Point3f p2;
     2 拷贝构造    Point3f p2(p1);
     3 数值初始化  Point2i p1(x0,x1);Point3f p2(x0,x1,x2);
     4 转换到Vector类型  (Vec3f) p;
     5 成员访问   p.x; p.y;
     6 点积运算   float x = p1.dot(p2);
     7 双精度点积 double x = p1.ddot(p2);
     8 向量积(仅适用三维)     p1.cross(p2);
     9 查询是否在某区域(rectangle)内(仅适用二维)     p.inside(r);
    10 注意: C++Point类转换成C语言结构CvPoint需要注意浮点型数据直接转换为CvPoint会自动四舍五入(CvPoint默认类型为int); 

    二、(图像)大小类型CvSize

    2.1 C语言 CvSize结构体

    CvSize 类型是一个包含两个int类型的结构体;通常表示某图像/区域的宽高大小(width, height)

    数据类型使用浮点型,同样显示指定CVSize2D32f

    2.2 C++语言  Size类

    相比Point类,

    1.数据成员不同,Size类成员为width 和 height

    2.不能转换成固定大小的Vector类,但Vector类和Point类可以转换成Size类

    Size类存在三种别名 Size == Size2i、Size2f

    Size类操作

    1 默认构造   Size sz;Size2i sz; Size2f p2;
    2 拷贝构造   Size sz2(sz1);
    3 数值初始化   Size sz(w,h);
    4 成员访问   sz.width; sz.height;
    5 计算区域面积   sz.area();

    三、区域矩形大小类型CvRect

    3.1 C语言 CvRect结构体

    CvRect派生于CvPoint和CvSize,包含四个int成员:x,y,width,height;

    3.2 C++语言 Rect结构体

    矩形类成员包含Point类成员的x,y表示矩形的左上角,Size类成员width和height表示矩形的大小,Rect类并不继承自Point或Size;

    Rect类操作

     1 默认构造   Rect r;
     2 拷贝构造   Rect r2(r1);
     3 数值初始化   Rect r(x, y, w , h);
     4 点坐标及大小初始化构造 Rect r(p,sz);
     5 两点初始化构造 Rect r(p1, p2);
     6 成员访问   r.x; r.y; r.width; r.height;
     7 计算区域面积 r.area();
     8 提取左上角点 r.tl();
     9 提取右下角点 r.br();
    10 判断点是否在某区域内  r.contains(p);
    11 
    12 重载操作符对象间的运算:
    13 矩形1与矩形2的交集              Rect r3 = r1 & r2;
    14 包含矩形1与矩形2的最小矩形   Rect r3 = r1 | r2;
    15 平移左上角坐标矩形大小不变    Rect r2 = r1 + p;
    16 放大或缩小矩形大小,左上角点不变 Rect r2 = r1 + sz;
    17 判断两个矩形是否相等  bool eq = ( r1 == r2);bool ne = ( r1 != r2);

    操作计算演示:

     1 #include <opencv2/core.hpp>
     2 #include <iostream>
     3  
     4 using namespace std;
     5 using namespace cv;
     6  
     7 int main()
     8 {
     9     Rect r1(5, 5, 15, 10);
    10     Rect r2(5, 5, 10, 5);
    11     Rect r3 = r1 | r2;
    12     Point p(2,3);
    13     Rect r4 = r1 + p;
    14     cout << "r3.width = " << r3.width << endl    //15
    15          << "r3.height= " << r3.height << endl   //10
    16          << "r3.area  = " << r3.area() << endl;  //150
    17     cout << r3 << endl;                          //[ 15 x 10 from (5, 5)]
    18     cout << r4 << endl;
    19     return 0;
    20 }

    四、图像像素RGBA值CvScalar

    4.1 C语言 CvScalar结构体

    内部存储了四个double型的值,分别为val[0],val[1],val[2],val[3],我们通常用的是前三个,val[0],val[1],val[2]的含义分别是彩色照片的三个通道BGR。R是红色分量,G是绿色分量,B是蓝色分量,a是alpha;

    图像存储的矩阵大小依赖于色彩空间的选用,更准确的说取决于所使用的通道数,在灰度图像中在内存描述如下:

    对于多通道图像,列包含与通道数量一样多的子列。例如,在BGR颜色系统的情况下:

    来自:https://docs.opencv.org/master/db/da5/tutorial_how_to_scan_images.html

    4.2 C++语言  Scalar类

    Scalar类直接继承固定大小的向量Vector类,直接支持向量类的代数操作,成员访问及其它操作特性;

    Scalar类的操作:

    1 默认构造      Scalar s;
    2 拷贝构造      Scalar s2(s1);
    3 数值初始化    Scalar s(x0); Scalar s(x0,x1,x2,s3);
    4 数组元素相乘  s1.mul(s2);
    5 共轭             s1.conj();

    五、补充部分

    5.1 旋转矩形类 RotatedRect类

    在OpenCV C++借口中少数不使用类模板实现的类型之一

    相比Rect类,该类将Point2f称为中心点,Size2f称为大小,另外一个附加的float称为角度(表现为围绕中心点顺时针方向旋转的角度)

    RotatedRect类操作

    1 默认构造     RotatedRect rr();
    2 拷贝构造     RotatedRect rr2(rr1);
    3 数值初始化   RotatedRect rr(p,sz,theta);
    4 两点初始化   RotatedRect rr(p1,p2);
    5 成员访问     rr.center; rr.size; rr.angle;
    6 返回4角点坐标 rr.points(pts[4]);

    5.2固定大小矩阵类 fixed matx类

    fixed matx类是针对在编译期间已知其维度的且通常处理矩阵代数运算,在栈上分配空间

    与其他类型的关系:

    matx是其他基础类型的核心;

    例如:fixed vector继承自fixed matrix;其它类(如Scalar类)继承自fixed vector,或者针对许多重要操作,它们都依赖于转换成fixed vector;

    如果对象确实是一个大型阵列,比如图像或一组大型点阵列应该使用Mat类;

    Matx类操作

     1 默认构造  Matx33f m33f; Matx43d m43d;
     2 拷贝构造  Matx22d m22d(n22d);
     3 数值初始化 Matx21f m(x0,x1); Matx44d m(x0,x1,x2,x3...x15);
     4 全指定元素 m33f = Matx33f::all(x);
     5 零矩阵     m23d = Matx23d::zeros();
     6 一矩阵     m16f = Matx16f::ones();
     7 单位矩阵   m33f = Matx33f::eye();
     8 均匀分布矩阵 m33f = Matx33f::randu(min, max);
     9 正态分布矩阵 m33f = Matx33f::nrandu(mean, variance);
    10 成员访问  m(i,j), m(i)一个参数仅限于一维矩阵
    11 矩阵代数运算 m1 = m0; m0*m1; m0 + m1; m0-m1;
    12 数乘运算  m*a;a*m;m/a;

    5.3固定大小向量类 fixed vector类

    继承自fixed matrix类,可以看做matx类列数为一的别名;

    该类的设计,便利性在于单顺序范文成员,并定义一些通常mat

    声明:Vec{2,3,4,6}{b,s,w,i,f,d}

    W- unsigned short

    fixed Vector类操作

    1 默认构造   Vec2s v2s;
    2 拷贝构造   Vec3f u3f(v3f);
    3 数值初始化 Vec2f v2f(x0,x1);
    4 成员访问   v4f(i), v3w[i] 两种操作符都可以
    5 向量积    v3f.cross(u3f);
    Written at : 2018.06.23
  • 相关阅读:
    vue 路由的实现 hash模式 和 history模式
    标准规范
    知识产权、项目收尾
    合同法、著作权、实施条例
    招投标法、政府采购法
    项目成熟度模型、量化项目管理
    信息系统综合测试与管理
    信息系统安全管理
    Spring Boot 6. 与数据访问
    Spring Boot 5. 与Docker
  • 原文地址:https://www.cnblogs.com/Shuqing-cxw/p/9217375.html
Copyright © 2011-2022 走看看