opencv 2.x学习笔记(三)基本数据类型(一)

opencv2.x版本和opencv3.x版本差异的一些问题 opencv3.x版本中遍历文件夹中的所有图像。 阅读详情

        上面两篇文章中,简单的介绍了OpenCV的一些使用方法。以使我们更快的了解OpenCV。而下面我们将更多的去探讨OpenCV内部的细节。为了方便我们使用,OpenCV为我们定义了许多数据类模板。了解这些基本的数据结构,将是我们更好使用OpenCV的基础。其中常见的如下所示:

Point_

        OpenCV分别为我们定义了2维点坐标和3维点坐标的类模板Point_和Point3_。类定义如下:

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坐标值。并且提供了大量的构造函数,以及和C语言结构中的CvPoint等的结构转换。并提供了两个点的点积和向量积运算,以及一个判断点是否在一个矩形内的方法。

        除了上面所提供的类成员方法,下列关于点的操作也是可以使用的。

pt1 = pt2 + pt3;
pt1 = pt2 - pt3;
pt1 = pt2 * a;
pt1 = a * pt2;
pt1 += pt2;
pt1 -= pt2;
pt1 *= a;
double value = norm(pt);
pt1 == pt2;
pt1 != pt2

        同时,为了方便我们的使用,OpenCV为我们定义了许多别名。如下所示:

typedef Point_<int> Point2i;
typedef Point2i Point;
typedef Point_<float> Point2f;
typedef Point_<double> Point2d;

         Point3_和Point2_类似,只是封装了x,y,z坐标。在此不再赘述。

Size_

        还有一个简单的类模板Size_,这个类模板为我们指定了矩阵或者图像的大小。类定义如下:

template<typename _Tp> class Size_
{
public:
    typedef _Tp value_type;

    //! various constructors
    Size_();
    Size_(_Tp _width, _Tp _height);
    Size_(const Size_& sz);
    Size_(const CvSize& sz);
    Size_(const CvSize2D32f& sz);
    Size_(const Point_<_Tp>& pt);

    Size_& operator = (const Size_& sz);
    //! the area (width*height)
    _Tp area() const;

    //! conversion of another data type.
    template<typename _Tp2> operator Size_<_Tp2>() const;

    //! conversion to the old-style OpenCV types
    operator CvSize() const;
    operator CvSize2D32f() const;

    _Tp width, height; // the width and the height
};

        可以看到这个类封装了一个叫做宽度和高度的变量。同时提供了计算面积的成员方法。其他的和Point_类类似。没什么特别的。

Rect_

         接下来我们看一下OpenCV提供的一个矩形类模板Rect_,类模板定义如下:

template<typename _Tp> class Rect_
{
public:
    typedef _Tp value_type;

    //! various constructors
    Rect_();
    Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height);
    Rect_(const Rect_& r);
    Rect_(const CvRect& 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;

    //! conversion to another data type
    template<typename _Tp2> operator Rect_<_Tp2>() const;
    //! conversion to the old-style CvRect
    operator CvRect() const;

    //! checks whether the rectangle contains the point
    bool contains(const Point_<_Tp>& pt) const;

    _Tp x, y, width, height; //< the top-left corner, as well as width and height of the rectangle
};
        很简单,这个类指示封装了矩阵的左上角坐标,以及矩形的宽度和高度。其中宽度和高度即为矩阵的大小(Size_),同时也可用于计算面积(area())。另外我们在通过contains函数来计算一个点是否包含在矩阵中时,需要注意的是矩阵的顶部和左边的边界被包含,而不包含右边和底部的边界。

综合实例

        下面看一个简单的例子:

#include <cv.h>
#include <iostream>

using namespace std;
using namespace cv;

int main()
{
	Point2f p1(1.0, 2.0);
	Point_<float> p2(3.0, 4.0);
	float dotproduct;
	double crossproduct;
	dotproduct = p2.dot(p1);
	crossproduct = p1.cross(p2);
	cout << "dot product of p1 and p2 = " << dotproduct << endl;
	cout << "cross product of p1 and p2 = " << crossproduct << endl;

	p2 += p1;
	cout << "Now p2 = " << p2 << endl;

	Rect_<float> rect(1.0, 2.0, 3.0, 4.0);
	Size_<float> size;
	float area;
	size = rect.size();
	area = rect.area();
	cout << "rectangle's size is " << size << endl;
	cout << "rectangle's area is " << area << endl;

	cout << "rect contains p1 is " << rect.contains(p1) << endl;
	cout << "rect contains p2 is " << rect.contains(p2) << endl;
	return 0;
}

运行结果

i

注:对于这些类型,我们都可以用<<操作符进行输出。其默认输出格式不再赘述。


opencv从入门到精通(3)——基本数据类型 1.常用的结构 opencv中定义了一些实用的数据类型,如下:     结构                                             成员变量                                表示的含义                    CvPoint 阅读详情

相关推荐

Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包

联网情况下在命令终端CMD中输入“pip install numpy”即可自动安装,pandas和matplotlib同理一样方法进行自动安装。 工作的电脑不能上外网,所以不能通过直接输入pip命令来安装。 环境:电脑上已经安装了Python(没有安装的请参考其他教程)。 Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包的步骤如下: ...

dayou7738的博客 4943

QT opencv 学习day02 基本数据结构 point Scalar Size Rect Mat 等等

QT opencv 学习day02 基本数据结构 point Scalar Size Rect Mat 等等

she666666的博客 828

开题报告该怎么写

考研即将来临,而一般很多大学都会选择在考研结束之后开始安排选题和开题报考(考研之前一般都不谈,老师也很人性化的,不愿意耽误你的复习) 但无论怎么推迟,我们最终都需要去面对并完成这些任务。 现在我就要教大家该如何写一个完整的开题报告! 准备模板。不同的学校有不同的格式,一般情况你的导师会给你们一个学校的标准格式,这个不用太费心。有了模板我们就可以按照模板的“线索”一步一步填充完成即可! 一般大致格式可谓: 研究背景/论文的目的、背景和意义 我们需要写明选择该题目的...

wuyueweifeng的博客 1096

Opencv3中Rect和rectangle函数

一、Rect类template&lt;typename _Tp&gt; class Rect_ { public: typedef _Tp value_type; //! various constructors Rect_(); Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height); Rect_(const Rec...

wwwlyj123321的博客 3万+

使用这个算法我可以实现英雄联盟里英雄的走位|Java 开发实战

A算法,A(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。 基本概念 首先在大学我们遇到最多的算法Dijkstra、Floyd、广度搜索、深度搜索。关于这些算法我们以后再慢慢的研究,今天的重点在A算法上。A算法是一种启发式算法。与上述几种算法不同的是A*算法在考虑起始节点的同时还会考虑到目标节点的代价。 在A*算法中我们给每个节点都定义一些属性。最基本的就是下文提到的三基数-这里的三基数是我自己定义.

Java进阶营 312

Unity游戏开发客户端Lua基础

Unity游戏开发客户端面经之 lua 篇

Sea3752的博客 1万+

Opencv常见数据类型(三)

一.cv::Rect类 (1)基本概念 cv::Rect类(矩形类)包括cv::Point类的成员x和y(用来表示矩形左上角顶点的坐标)以及cv::Size类的成员width和height(用来表示矩形的宽和高),其主要用来表示一个二维的矩形。在Opencv中其定义如下: template<typename _Tp> class Rect_ { public: typedef _Tp value_type; //! default constructor Rec

sunshineking9的博客 2406

手把手教你逆向分析某里系bx-ua参数(以225版本为例)

本文详细解析了某里系应用bx-ua参数的逆向工程实战方法,重点拆解其三层加密体系(二进制加密、字符替换和Base64编码)。通过工具链配置和实战案例,帮助开发者掌握逆向分析技巧,适用于合法合规的安全研究和加密技术评估场景。

weixin_33220360的博客 413

OpenCv2 学习笔记(4) OpenCv基本的数据类型

Mat的详细讲述安排在下一节,本节将简要介绍其他最常用的几个数据类型,包括Point_、Point3_、Size_、Rect_、Matx、Vec、Scalar_等,分别为二维点、三维点、尺寸、矩形、小矩阵、小向量、标量等模板类。 1、Point_ 可以理解为二维点,包括下面的int、float和double3三种类型的二维点。 typedef Point_&lt;int&gt; Point...

热爱生活,忠于自己 3262

Python环境搭建和LabVIEW中的调用

本文主要介绍Python相关的环境搭建、Anaconda的使用以及在LabVIEW中调用Python的方法。

lvxisi的博客 6390

EMC意义下的共模(Common Mode)和差模(Differential Mode)

在电子产品中,信号或电源通过两根导线传输。对比维度差模(DM)共模(CM)电流方向一进一出,相等相反同向、相等回流路径两根导线组成的闭合回路地或外壳EMC影响较小容易辐射干扰,重点治理类型定义有用信号干扰信号抑制方法常规滤波器、电感、电容共模电感、磁环、屏蔽、接地技术等。

weixin_43199439的博客 1248

OpenCV中基本数据结构(1)_Point

为了便于对一些常见的数据进行操作,OpenCV定义了一些常见的数据结构(Point ,Scalar等),以方便后续对数据算法的实现,主要分为basic data type、helper objects、large array types等三种数据结构类型,其中basic data type是最常见使用频率最高的数据结构,主要包括一些简单的向量和矩阵等等,主要用于局部变量中,此类型最典型的是数据都是...

weixin_42730667的博客 5087

2026华为OD面试手撕代码真题目录

一般面试的时候每一轮技术面都会出一到两个手撕代码题,这些题的特点就是,非常短小,易于理解。不可能会再出阅读理解一样的机试题的。但是这些题目也非常注意基本功,很注意细节的处理,一般都是easy+medium题目。但是大家一定要注意,因为大部分面试官上面一开始就会让你做题,直接看你所有的做题过程(防止有人水平一般,机试就网上找的答案的蒙混过关),手撕代码题会给你后面的面试定一个基调。

MISAYAONE的博客 9万+

【OpenCV实战】2.OpenCV基本数据类型实战

【代码】【OpenCV实战】2.OpenCV基本数据类型实战。

Scott_S的博客 2005

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

OpenCV学习笔记(一)之常用基本数据类型

引言 就像C、C++等语言一样,OpenCV作为一个开源库,为了便捷及良好的封装性,它也有很多自己定义的数据类型,这些类型在很多地方都有用到。学习OpenCV首先就需要对它的基本数据类型有个大概的了解,这样在之后开始正式项目时就算遇到各种各样复杂的数据类型也好回头再来查找。 CvPoint 类型 CvPoint类型 IplImage 类型 ...

夜月枫雪 488

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Python 2.x 环境下卸载 OpenCV 2.x 安装 OpenCV 3.x

Python 2.x 环境下卸载 OpenCV 2.x 安装 OpenCV 3.x https://pypi.org/project/opencv-python/ 1. OpenCV on Wheels Unofficial pre-built OpenCV packages for Python. 2. Installation and Usage If you have previous/other manually installed (= not installed via pip) versi

程永强 2961

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Opencv基本数据类型

Opencv基本数据类型主要包括:cv::Vec、cv::Point、cv::Size、cv::Scalar、cv::Rect、cv::Matx、cv::Range等。 1 Point类 cv::Point{2,3}{b,s,i,f,d},2、3代表维度,在这里b是一个无符号字符,s是一个短整型,i是一个32位整型,f是一个32位浮点数,d是一个64位浮点数。Point类的成员通过名称变量访问...

hehuazheyue的博客 2817

Python2.x上使用freetype实现OpenCV2.x的中文输出

OpenCV2.x的putText是无法处理中文的(OpenCV3.x中集成了freetype实现中文输出),同样,Python2.x对中文的支持也很差(同样这一情况在Python3.x中得到了改善)。 所以最方便的方法是,两个都换成3.x版本的。。。[捂脸] freetype的安装 计算机上显示文本的过程大体上是,先将文本转换成一个一个的bitmap,然后再用图形系统将这些bitm

zizi7的专栏 1万+

Opencv学习笔记(三)--图像处理的基本操作

Opencv图像处理基本操作1基本数据类型 图像有若干个通道,灰度图像只有一个通道,而彩色具有红,绿,蓝组成,但是OpenCv以逆序的方式来存储三个分量,还可以使用第四个透明度(alpha),可以使用img.channels()获取图像通道个数。 使用若干个位存储一副图像的每个像素,这被称为图像的深度,灰度图像为8位,即0-255个灰度级,可以用img.depth()获得图像的深度,其返回值为:

yqtao的博客 2万+

【OpenCV学习笔记】2.1OpenCV基本数据类型

OpenCV提供了多种基本数据类型。虽然这些数据类型在C语言中不是基本类型,但结构都很简单,可将它们作为原子类型。可以在“…/OpenCV/cxcore/include”目录下的cxtypes.h文件中查看其详细定义。 数据类型中最简单的就是CvPoint。CvPoint是一个包含integer类型成员x和y的简单结构体。CvPoint有两个变体类型:CvPoint2D32f和CvPoint3...

weixin_30240349的博客 178

【OpenCV】基本数据类型及常见图像模式

OpenCV是一个开源的跨平台计算机视觉库,广泛应用于目标识别(如人脸、车辆、车牌)、自动驾驶、医学影像分析、视频内容理解与分析(如文字识别、公众人物识别、物品分类)等领域。它支持多种基本数据类型,包括点和向量类型(如二维点、三维点)以及标量类型(用于表示颜色或像素值)。OpenCV还支持多种图像模式,如位图、灰度、RGB等,并提供了丰富的图像处理功能,如雪花屏生成、高斯模糊、中值滤波、毛玻璃效果、灰度转换和方向模糊等。通过使用OpenCV,开发者可以高效地实现复杂的计算机视觉任务,解决实际问题。

weixin_74154742的博客 1171

TensorFlow2.X结合OpenCV 实现手势识别

TensorFlow2.X结合OpenCV 实现手势识别 数据集

FlyDremever 5785

OpenCV2学习笔记(一):图像的基本操作

基于Qt5+OpenCV2.4.9的图像阈值分割

liyuefeilong的专栏 4698

(一)ROS2中OPENCV的使用步骤

ros2中OPENCV使用步骤。

qq_45907168的博客 6144

OpenCV学习笔记(一)

OpenCV学习笔记,向人工智能前进!

lbylzk8的博客 1289

OpenCV基础一: 基本数据类型及其基本函数(陆续更新)

介绍OpenCV中的一些基础数据类型及其函数操作

Beking17113的博客 3690
上一篇: opencv 2.x学习笔记(二)修改和保存图像
下一篇: opencv 2.x学习笔记(四)基本数据类型(二)
zhbmd
博客等级 码龄14年 21粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值