QT opencv 学习day02 基本数据结构 point Scalar Size Rect Mat 等等

1.point   (画点)

1. 函数原型: 

//二维的点
typedef Point_ Point2i;
typedef Point_ Point2l;
typedef Point_ Point2f;
typedef Point_ Point2d;
typedef Point2i Point;


//三维的点
typedef Point3_ Point3i;
typedef Point3_ Point3f;
typedef Point3_ Point3d;

二维的结构体模板 :Point_

template class Point_
{
public:
    typedef _Tp value_type;

    //! default constructor
    Point_();
    Point_(_Tp _x, _Tp _y);
    Point_(const Point_& pt);
    Point_(const Size_<_Tp>& sz);
    Point_(const Vec<_Tp, 2>& v);

    Point_& operator = (const Point_& pt);
    //! conversion to another data type
    template operator Point_<_Tp2>() const;

    //! conversion to the old-style C structures
    operator Vec<_Tp, 2>() const;

    //! dot product
    _Tp dot(const Point_& pt) const;
    //! dot product computed in double-precision arithmetics
    double ddot(const Point_& pt) const;
    //! cross-product
    double cross(const Point_& pt) const;
    //! checks whether the point is inside the specified rectangle
    bool inside(const Rect_<_Tp>& r) const;
    _Tp x; //!< x coordinate of the point
    _Tp y; //!< y coordinate of the point
};

三维的结构体模板 :Point3_

template class Point3_
{
public:
    typedef _Tp value_type;

    //! default constructor
    Point3_();
    Point3_(_Tp _x, _Tp _y, _Tp _z);
    Point3_(const Point3_& pt);
    explicit Point3_(const Point_<_Tp>& pt);
    Point3_(const Vec<_Tp, 3>& v);

    Point3_& operator = (const Point3_& pt);
    //! conversion to another data type
    template operator Point3_<_Tp2>() const;
    //! conversion to cv::Vec<>
#if OPENCV_ABI_COMPATIBILITY > 300
    template operator Vec<_Tp2, 3>() const;
#else
    operator Vec<_Tp, 3>() const;
#endif

    //! dot product
    _Tp dot(const Point3_& pt) const;
    //! dot product computed in double-precision arithmetics
    double ddot(const Point3_& pt) const;
    //! cross product of the 2 3D points
    Point3_ cross(const Point3_& pt) const;
    _Tp x; //!< x coordinate of the 3D point
    _Tp y; //!< y coordinate of the 3D point
    _Tp z; //!< z coordinate of the 3D point
};

 

2.参数: 

Point2i(int x,int y) 参数1: int  参数2: int
Point2l(int64 x,int64 y ) 参数1:  int64  参数2: int64
Point2f(float x, float y ) 参数1: float  参数2: float
Point2d(double x, doubley) 参数1: double 参数2: double
Point3i(int x,int y ,int z) 参数1: int  参数2: int
Point3f(float x, float y, float z) 参数1 float  参数2: float  参数3: float
Point3d(double x, double y ,double z) 参数1:double  参数2:double 参数3 : double

 3. 使用方法

 cv::Point2i a1(1,1);//二维 int 类型的点

 cv::Point2l a2(16,16);//二维 int64 类型的点

 cv::Point2f a3(1.1,1.1);//二维 float 类型的点

 cv::Point2d a4(1.1,1.1);//二维 double 类型的点

 cv::Point3i a5(1,1,1);//三维 int 类型的点

 cv::Point3f a6(1.1,1.2,1.3);//三维 float 类型的点

 cv::Point3d a7(1.1,1.2,1.3);//三维  double  类型的点


2. Scalar  颜色 (RGB)

1. 函数原型:

typedef Scalar_ Scalar;

class Scalar_ 结构体:

template class Scalar_ : public Vec<_Tp, 4>
{
public:
    //! default constructor
    Scalar_();  //构造
    Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);//两位的构造
    Scalar_(_Tp v0);//一位的构造

    template
    Scalar_(const Vec<_Tp2, cn>& v);

    //! returns a scalar with all elements set to v0
    static Scalar_<_Tp> all(_Tp v0);

    //! conversion to another data type
    template operator Scalar_() const;

    //! per-element product
    Scalar_<_Tp> mul(const Scalar_<_Tp>& a, double scale=1 ) const;

    //! returns (v0, -v1, -v2, -v3)
    Scalar_<_Tp> conj() const;

    //! returns true iff v1 == v2 == v3 == 0
    bool isReal() const;
};

2. 使用方法

    cv::Scalar s1;//空构造
    cv::Scalar s2(s1);//拷贝构造
    cv::Scalar s3(255);//赋值构造1
    cv::Scalar s4(255,255,255,0);//赋值构造2
    cv::Scalar s5(255,255,255,0);//定义点s5
    cv::Scalar s6(10,10,10,0);//定义点s6
    cv::Scalar s7;//定义点s7
    s7=s5.mul(s6);//s7=s5*s6

    //scalar(g,b,r)可以用于表示色彩。

    //scalar(255)表示全白。

3.Size  (大小)

1.函数原型:

typedef Size_ Size2i;
typedef Size_ Size2l;
typedef Size_ Size2f;
typedef Size_ Size2d;
typedef Size2i Size;

 Size_ 结构体 模板:

template class Size_
{
public:
    typedef _Tp value_type;

    //! default constructor
    Size_();
    Size_(_Tp _width, _Tp _height);
    Size_(const Size_& sz);
    Size_(const Point_<_Tp>& pt);

    Size_& operator = (const Size_& sz);
    //! the area (width*height)
    _Tp area() const;
    //! true if empty
    bool empty() const;

    //! conversion of another data type.
    template operator Size_<_Tp2>() const;

    _Tp width; //!< the width
    _Tp height; //!< the height
};

2. 使用方法:

Size2i s1(1,1);
Size2l s2(100,200);
Size2f s3(1.1,1.2);
Size2d s4(1.3,1.4);


 4. Rect   (矩形)

1.函数模型:

typedef Rect_ Rect2i;
typedef Rect_ Rect2f;
typedef Rect_ Rect2d;
typedef Rect2i Rect; //Rect  默认是 Rect2i

Rect_ 结构体模板:

template class Rect_
{
public:
    typedef _Tp value_type;

    //! default constructor
    Rect_();
    Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height);
    Rect_(const Rect_& r);
    Rect_(const Point_<_Tp>& org, const Size_<_Tp>& sz);
    Rect_(const Point_<_Tp>& pt1, const Point_<_Tp>& pt2);

    Rect_& operator = ( const Rect_& r );
    //! the top-left corner
    Point_<_Tp> tl() const;
    //! the bottom-right corner
    Point_<_Tp> br() const;

    //! size (width, height) of the rectangle
    Size_<_Tp> size() const;
    //! area (width*height) of the rectangle
    _Tp area() const;
    //! true if empty
    bool empty() const;

    //! conversion to another data type
    template operator Rect_<_Tp2>() const;

    //! checks whether the rectangle contains the point
    bool contains(const Point_<_Tp>& pt) const;

    _Tp x; //!< x coordinate of the top-left corner
    _Tp y; //!< y coordinate of the top-left corner
    _Tp width; //!< width of the rectangle
    _Tp height; //!< height of the rectangle
};

2. 使用方法

方法一: 先创两个点, 再创建一个矩形

//定义起点和终点
    cv::Point p1(1,1);
    cv::Point p2(2,2);
    cv::Rect r5(p1,p2);

方法二: 先创建一个点  再创建一个 尺寸

//定义起点和尺寸
    cv::Point p1(1,1);
    cv::Size s1(1,1);
    cv::Rect r4(p1,s1);

方法三: 填写每个参数

//定义起点、宽度、高度
    int x = 10;
    int y = 10;
    int w = 100;
    int h = 100;
    cv::Rect r3(x,y,w,h);

方法四 : 拷贝构造

3.相关的函数

    //定义一个矩形
    int p = r3.x;
    int q = r3.y;
    int m = r3.width;
    int n = r3.height;
 
    //矩形的面积
    int area = r3.area();
 
    //矩形的尺寸
    cv::Size size = r3.size();
 
    //矩形的左上点
    cv::Point a = r3.tl();
 
    //矩形的右下点
    cv::Point b = r3.br();
 
    //是否包含点a
    bool i = r3.contains(a);


5.RotatedRect   (旋转矩形)

1.函数原型: 

1. RotatedRect();
2. RotatedRect(const Point2f& center, const Size2f& size, float angle);
3. RotatedRect(const Point2f& point1, const Point2f& point2, const Point2f& point3);

解读: 
1. RotatedRect()  空构造

2. RotatedRect(const Point2f& center, const Size2f& size, float angle);

参数:

center : 矩形的中心点

size :   矩形的宽度和高度  

angle :  顺时针旋转的角度


3. RotatedRect(const Point2f& point1, const Point2f& point2, const Point2f& point3);

参数: 矩形,顺时针的三个点。

2.使用方法:

    //定义3个点
    cv::Point p1(0,0);
    cv::Point p2(100,0);
    cv::Point p3(0,100);
    //定义一个旋转矩形
    cv::RotatedRect rr3(p1,p2,p3);
 
    //定义一个中心点
    cv::Point p0(500,500);
    //定义一个大小
    cv::Size sz(100,100);
    //定义一个旋转矩形
    cv::RotatedRect rr4(p0,sz,45);

3.相关函数

    //定义一个矩形
    cv::RotatedRect rr5;
    //获取矩形的中心点坐标
    cv::Point center5 = rr5.center;
    //获取矩形的大小
    cv::Size sz5 = rr5.size;
    //获取矩形的旋转角度
    float angle = rr5.angle;
    //获取矩形的4个端点
    cv::Point2f pts[4];
    rr5.points(pts);



6. Matx (矩阵)

1. 函数原型:

typedef Matx Matx12f;
typedef Matx Matx12d;
typedef Matx Matx13f;
typedef Matx Matx13d;
typedef Matx Matx14f;
typedef Matx Matx14d;
typedef Matx Matx16f;
typedef Matx Matx16d;

typedef Matx Matx21f;
typedef Matx Matx21d;
typedef Matx Matx31f;
typedef Matx Matx31d;
typedef Matx Matx41f;
typedef Matx Matx41d;
typedef Matx Matx61f;
typedef Matx Matx61d;

typedef Matx Matx22f;
typedef Matx Matx22d;
typedef Matx Matx23f;
typedef Matx Matx23d;
typedef Matx Matx32f;
typedef Matx Matx32d;

typedef Matx Matx33f;
typedef Matx Matx33d;

typedef Matx Matx34f;
typedef Matx Matx34d;
typedef Matx Matx43f;
typedef Matx Matx43d;

typedef Matx Matx44f;
typedef Matx Matx44d;
typedef Matx Matx66f;
typedef Matx Matx66d;

2.使用方法

    //空构造
    cv::Matx33f m1;
 
    //拷贝构造
    cv::Matx33f m2(m1);
 
    //赋值构造
    cv::Matx33f m3(1,2,3,
                   4,5,6,
                   7,8,9);

     //取值
    float c = m3(1,1);//取第二行、第二列的数据
    
    

 3.相关函数

    //矩阵计算
    cv::Matx33f m1;
    cv::Matx33f m2;
    cv::Matx33f m3;
 
    m1=m2.t();//转置
    m3=m1.mul(m2);//点乘



7.Range  (定义一个范围)

1.函数原型 

class CV_EXPORTS Range
{
public:
    Range();
    Range(int _start, int _end);
    int size() const;
    bool empty() const;
    static Range all();

    int start, end;
};

2. 使用方法

    cv::Range ran(0,10);//定义一个范围
 
    int a = ran.start;//取范围的起点
    int b = ran.end;//取范围的终点
 
    qDebug()<




8.Ptr     (指针)

opencv中的Ptr指其使用的智能指针,指的是Template class for smart reference-counting pointers(智能指针模板类)

ptr是在访问图片中像素时的操作,如image.ptr(5),指的是访问image图片的第6行像素值。

1.使用方法:

    //构造形式1
    cv::Ptrp1(new cv::Matx33d);
 
 
    //构造形式2
    cv::Ptrp2=makePtr;

2.相关函数

    //判断是否为空
    bool b1 = p1.empty();
    
 
    //主动释放
    p2.release();



9.Mat  (图片)

1.函数原型:

1. Mat();  //空构造
2. Mat(int rows, int cols, int type);//
3. Mat(Size size, int type);
4. Mat(int rows, int cols, int type, const Scalar& s);
5. Mat(Size size, int type, const Scalar& s);
6. Mat(int ndims, const int* sizes, int type);
7. Mat(const std::vector& sizes, int type);
8. .........

QT opencv 学习day02 基本数据结构 point Scalar Size Rect Mat 等等_第1张图片

2.使用方法

    //空构造
    cv::Mat mat1;
 
    //赋值构造(大概有29种重载,只示例了其中一种)
    cv::Mat mat2(cv::Size sz,int type);
 
    //读取一张图片,将数据存储到mat3,然后进行处理
    cv::Mat mat3 = imread("C:/opencv/123.jpg");
 
    //特殊构造
    Mat mat4 = Mat::zeros(10,10,CV_32F);//全黑(全部为0)
    Mat mat5 = Mat::ones(10,10,CV_32F);//全白(全部为1)
    Mat mat6 = Mat::ones(10,10,CV_32F);//对角为白,其余为黑(对角为1,其余为0)

 




你可能感兴趣的:(QT,语言的学习,opencv,学习,人工智能)