opencv基本数据类型

 

目录

1.点的表示:Point_   Point3_

2.尺寸的表示:Size_

3.Vec类:描述多通道Mat的像素

4.Matx:已知尺寸的小Mat模板类

5.颜色类Scalar:

6.Rect:矩形表示类

7.Range类

8.cv::Ptr指针模板


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();

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值