目录
1.点的表示:Point_ Point3_
opencv中Point_的定义(Point3_基本相同):
// 定义
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;
//成员函数
//点积(数量积) x1*x1+y1*y2
_Tp dot(const Point_& pt) const;
//双精度点积
double ddot(const Point_& pt) const;
//叉乘(向量积)x1*y2-y1*x2
double cross(const Point_& pt) const;
//检查该点是否在指定矩形内
bool inside(const Rect_<_Tp>& r) const;
2.尺寸的表示:Size_
opencv中Size_的定义:
//定义
typedef Size_<int> Size2i;
typedef Size_<int64> Size2l;
typedef Size_<float> Size2f;
typedef Size_<double> Size2d;
typedef Size2i Size;
//成员函数
//面积(width*height)
_Tp area() const;
//面积是否为0
bool empty() const;
3.Vec类:描述多通道Mat的像素
typedef Vec<int, 2> Vec2i;
typedef Vec<int, 3> Vec3i;
typedef Vec<int, 4> Vec4i;
typedef Vec<int, 6> Vec6i;
typedef Vec<int, 8> Vec8i;
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;
//
cv::Mat Img(10, 10, CV_8UC3,Scalar(255,255,255));
uchar pixel = Img.at<Vec3b>(9, 9)[0];
4.Matx:已知尺寸的小Mat模板类
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;
5.颜色类Scalar:
含有4个元素的数组,在opencv中被用来传递像素值,RGB三个像素值,如用不到第四个,则不需要写出来。
template<typename _Tp> class Scalar_ : public Vec<_Tp, 4>
typedef Scalar_<double> Scalar;
6.Rect:矩形表示类
//定义
typedef Rect_<int> Rect2i;
typedef Rect_<float> Rect2f;
typedef Rect_<double> Rect2d;
typedef Rect2i Rect;
//成员函数
//返回左上角坐标
Point_<_Tp> tl() const;
//返回右下角坐标
Point_<_Tp> br() const;
//返回矩形框的宽与高
Size_<_Tp> size() const;
//面积
_Tp area() const;
//面积是否为0
bool empty() const;
//判断点是否在矩形内
bool contains(const Point_<_Tp>& pt) const;
7.Range类
多用于指定Mat中的连续的多行或列,Range(a,b) 表示范围从a到b的前闭后开的区间[a,b)。
//定义
class CV_EXPORTS Range
{
public:
Range();
Range(int _start, int _end);
Range(const CvSlice& slice);
//return end - start
int size() const;
//是否为空:start==end
bool empty() const;
static Range all();
operator CvSlice() const;
int start, end;
};
//应用举例:
cv::Mat Img(10, 10, CV_8UC3,Scalar(255));
//dst提取Img的第1列到第4列,,Mat(行,列)
cv::Mat dst = Img(Range::all(), Range(1,5));
8.cv::Ptr指针模板
cv::Ptr与C++ 中智能指针share_ptr类似,与new delete相比,智能指针管理动态内存最大的优点就是可以自动释放内存,避免内存泄漏。智能指针也是模板,因此建立一个智能指针时,必须提供额外的信息—指针指向的类型。与vector模板一样,在尖括号内给出类型,如:
share_ptr<string> str1;
//opencv中定义对象时,通常使用cv::Ptr。
Ptr<dnn::Importer> importer;
Ptr<FeatureDetector> orb = ORB::create();