1.point (画点)
1. 函数原型:
//二维的点
typedef Point_<int> Point2i;
typedef Point_<int64> Point2l;
typedef Point_<float> Point2f;
typedef Point_<double> Point2d;
typedef Point2i Point;
//三维的点
typedef Point3_<int> Point3i;
typedef Point3_<float> Point3f;
typedef Point3_<double> Point3d;
二维的结构体模板 :Point_
template<typename _Tp> 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<typename _Tp2> 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<typename _Tp> 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<typename _Tp2> operator Point3_<_Tp2>() const;
//! conversion to cv::Vec<>
#if OPENCV_ABI_COMPATIBILITY > 300
template<typename _Tp2> 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_<double> Scalar;
class Scalar_ 结构体:
template<typename _Tp> 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<typename _Tp2, int cn>
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<typename T2> operator Scalar_<T2>() 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_<int> Size2i;
typedef Size_<int64> Size2l;
typedef Size_<float> Size2f;
typedef Size_<double> Size2d;
typedef Size2i Size;
Size_ 结构体 模板:
template<typename _Tp> 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<typename _Tp2> 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_<int> Rect2i;
typedef Rect_<float> Rect2f;
typedef Rect_<double> Rect2d;
typedef Rect2i Rect; //Rect 默认是 Rect2i
Rect_ 结构体模板:
template<typename _Tp> 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<typename _Tp2> 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<float, 1, 2> Matx12f;
typedef Matx<double, 1, 2> Matx12d;
typedef Matx<float, 1, 3> Matx13f;
typedef Matx<double, 1, 3> Matx13d;
typedef Matx<float, 1, 4> Matx14f;
typedef Matx<double, 1, 4> Matx14d;
typedef Matx<float, 1, 6> Matx16f;
typedef Matx<double, 1, 6> Matx16d;
typedef Matx<float, 2, 1> Matx21f;
typedef Matx<double, 2, 1> Matx21d;
typedef Matx<float, 3, 1> Matx31f;
typedef Matx<double, 3, 1> Matx31d;
typedef Matx<float, 4, 1> Matx41f;
typedef Matx<double, 4, 1> Matx41d;
typedef Matx<float, 6, 1> Matx61f;
typedef Matx<double, 6, 1> Matx61d;
typedef Matx<float, 2, 2> Matx22f;
typedef Matx<double, 2, 2> Matx22d;
typedef Matx<float, 2, 3> Matx23f;
typedef Matx<double, 2, 3> Matx23d;
typedef Matx<float, 3, 2> Matx32f;
typedef Matx<double, 3, 2> Matx32d;
typedef Matx<float, 3, 3> Matx33f;
typedef Matx<double, 3, 3> Matx33d;
typedef Matx<float, 3, 4> Matx34f;
typedef Matx<double, 3, 4> Matx34d;
typedef Matx<float, 4, 3> Matx43f;
typedef Matx<double, 4, 3> Matx43d;
typedef Matx<float, 4, 4> Matx44f;
typedef Matx<double, 4, 4> Matx44d;
typedef Matx<float, 6, 6> Matx66f;
typedef Matx<double, 6, 6> 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()<<a;//打印a
qDebug()<<b;//打印b
8.Ptr (指针)
opencv中的Ptr指其使用的智能指针,指的是Template class for smart reference-counting pointers(智能指针模板类)
ptr是在访问图片中像素时的操作,如image.ptr<uchar>(5),指的是访问image图片的第6行像素值。
1.使用方法:
//构造形式1
cv::Ptr<Matx33d>p1(new cv::Matx33d);
//构造形式2
cv::Ptr<Matx33d>p2=makePtr<Matx33d>;
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<int>& sizes, int type);
8. .........
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)