opencv中提供了很多绘图函数,在进行图像处理,对感兴趣区域进行标定时,就需要利用这些绘图函数。现在集中做一个归纳介绍。
1. Point
Point常用来指定一幅二维图像中的点。如
Point pt;
pt.x = 10;
pt.y = 8;
或
Point pt = Point(10,8);
其指向的是在图像中(10, 8)位置的一个像素点。
查找Point引用可以在”core.hpp”文件发现如下语句:
typedef Point_<int> Point2i;
typedef Point2i Point;
即Point_与Point2i和Point是等价的。查看Point_定义出现很多模板如下:
template<typename _Tp> inline Point_<_Tp>::Point_(_Tp _x, _Tp _y) : x(_x), y(_y) {}
其从Point_继承而来,继续查看Point_定义如下:
template<typename _Tp> class Point_
{
public:
typedef _Tp value_type;
// various constructors
Point_();
Point_(_Tp _x, _Tp _y);
Point_(const Point_& pt);
Point_(const CvPoint& pt);
Point_(const CvPoint2D32f& 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 CvPoint() const;
operator CvPoint2D32f() const;
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, y; //< the point coordinates
};
整个Point类的定义就很明显了。可以通过制定(x,y)来指定二维图像中的点。
2. Scalar
表示颜色的类,Scalar代表了一个四元素的vector容器,在opencv中常用来传递像素值。在本篇博客中将主要用来表示BGR三个像素的值。如果不使用则最后一个参数不用设置。如
Scalar(a, b, c);
其中a,b,c分别代表像素点Blue,Green,Red的值。
同样查看Scalar类的引用在”core.hpp”头文件发现如下语句:
typedef Scalar_<double> Scalar;
查看Scalar_定义:
template<typename _Tp> class Scalar_ : public Vec<_Tp, 4>
{
public:
//! various constructors
Scalar_();
Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);
Scalar_(const CvScalar& s);
Scalar_(_Tp v0);
//! returns a scalar with all elements set to v0
static Scalar_<_Tp> all(_Tp v0);
//! conversion to the old-style CvScalar
operator CvScalar() const;
//! conversion to another data type
template<typename T2> operator Scalar_() const;
//! per-element product
Scalar_<_Tp> mul(