OpenCV中基本数据结构(3)_Size

本文详细介绍了OpenCV中的Size数据结构,包括其不同类型的定义(如Size2i、Size2f等),构造方法,成员变量(width、height),以及常用的方法(如area、aspectRatio、empty)。同时,文章提供了Size类的使用示例代码,展示了如何创建、赋值、比较Size对象,并计算其面积和长宽比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Size数据结构经常被OpenCV用来表示尺寸,其成员为width和height,被用来表示矩阵或者图片的宽和高。

Size

Size预定义个几个类型有:

Size2i:整型int

Size2l:int64

Size2f:float

Size2d:double

源代码如下:

最后都是使用的 Size_类

Size_类

Size_类和Point_,Scalar_类相似,相对Mat比较简单:

总体使用方法如下:

MethodDescription
默认构造函数

cv::Size sz;

cv::Size2i szi;

cv::Size2l szl;

cv::Size2f szf;

cv::Size2d szd;

copy构造函数

Size_(const Size_& sz)

cv::Size sz2(sz);

带参数构造函数

Size_(_Tp _width, _Tp _height)

_width:宽度

_height:高度

cv::Size sz3(4,6)

成员:

_Tp width; 

_Tp height

width:宽度

height:高度

area:计算面积(width*height)

 _Tp area()

返回值为(width*height)

 

aspectRatio:计算斜率(width/height)

double aspectRatio()

返回值为double :(width/height)(4.0以上版本新添加)

empty :是否为空

bool empty()

true: width <= 0或height <= 0

false:width>0 && height > 0

用例:

#include <stdio.h>
#include "opencv2/opencv.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;
using namespace std;


void main()
{
	
	Size sz;
	Size2i szi;
	Size2l szl;
	Size2f szf;
	Size2d szd;

	cout << "sz.empty=:" << sz.empty() << endl;
	cout << "szi.empty=:" << szi.empty() << endl;
	cout << "szl.empty=:" << szl.empty() << endl;

	Size sz2(200, 300);
	Size2i szi2(300, 300);
	cout << "sz2=:" << sz2 <<endl;
	cout << "szi2=:" << szi2 << endl;
	
	Size2l szl2(21432,124214);
	cout << "szl2=:" << szl2 << endl;

	Size2f szf2(32543.123,523412.12323);
	cout << "szf2=:" << szf2 << endl;

	Size2d szd2(1253298,21323213);
	cout << "szd2=:" << szd2 << endl;


	Size sz3(sz2);
	cout << "sz3=:" << sz3 << endl;
	cout << "sz3.area=:" << sz3.area() << endl;
	//cout << "sz3.aspectRatio=:" << sz3.aspectRatio() << endl;
	cout << "sz3.empty=:" << sz3.empty() << endl;

	Size2l szl3(szl2);
	cout << "szl3=:" << szl3 << endl;
	cout << "szl3.area=:" << szl3.area() << endl;
	cout << "szl3.empty=:" << szl3.empty() << endl;

	Size2f szf3(szf2);
	cout << "szf3=:" << szf3 << endl;
	cout << "szf3.area=:" << szf3.area() << endl;
	cout << "szf3.empty=:" << szf3.empty() << endl;

	Size2d szd3(szd2);
    cout << "szd3=:" << szd3 << endl;
	cout << "szd3.area=:" << szd3.area() << endl;
	cout << "szd3.empty=:" << szd3.empty() << endl;
	
}

运行结果:

 Size_类 operator重构

Size_类通过operator重构的操作有:

operatorMethod
=template<typename _Tp> inline
Size_<_Tp>& Size_<_Tp>::operator = (const Size_<_Tp>& sz)
template<typename _Tp> inline
Size_<_Tp>& Size_<_Tp>::operator = (Size_<_Tp>&& sz)
*=template<typename _Tp> static inline
Size_<_Tp>& operator *= (Size_<_Tp>& a, _Tp b)
*template<typename _Tp> static inline
Size_<_Tp> operator * (const Size_<_Tp>& a, _Tp b)
/=template<typename _Tp> static inline
Size_<_Tp>& operator /= (Size_<_Tp>& a, _Tp b)
/template<typename _Tp> static inline
Size_<_Tp> operator / (const Size_<_Tp>& a, _Tp b)
+=template<typename _Tp> static inline
Size_<_Tp>& operator += (Size_<_Tp>& a, const Size_<_Tp>& b)
+template<typename _Tp> static inline
Size_<_Tp> operator + (const Size_<_Tp>& a, const Size_<_Tp>& b)
-=template<typename _Tp> static inline
Size_<_Tp>& operator -= (Size_<_Tp>& a, const Size_<_Tp>& b)
-template<typename _Tp> static inline
Size_<_Tp> operator - (const Size_<_Tp>& a, const Size_<_Tp>& b)
==template<typename _Tp> static inline
bool operator == (const Size_<_Tp>& a, const Size_<_Tp>& b)
!=template<typename _Tp> static inline
bool operator != (const Size_<_Tp>& a, const Size_<_Tp>& b)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huo的藏经阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值