OpenCV中有许多常用的数据类型

这篇具有很好参考价值的文章主要介绍了OpenCV中有许多常用的数据类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenCV中有许多常用的数据类型,以下是其中一些常见的数据类型:

cv::Mat:用于表示图像和矩阵的类。

cv::Point:用于表示二维平面上的点,包含 x 和 y 坐标。

cv::Rect:用于表示矩形区域,包含左上角的点和矩形的宽度和高度。

cv::Size:用于表示尺寸,包含宽度和高度。

cv::Scalar:用于表示多通道数据,例如颜色值,包含一个或多个数值。

cv::Vec2f、cv::Vec3f、cv::Vec4f:用于表示浮点数的向量,分别包含2、3、4个浮点数。

cv::Vec2i、cv::Vec3i、cv::Vec4i:用于表示整数的向量,分别包含2、3、4个整数。

cv::Vec2d、cv::Vec3d、cv::Vec4d:用于表示双精度浮点数的向量,分别包含2、3、4个双精度浮点数。

cv::KeyPoint:用于表示图像中的关键点,包含关键点的坐标、尺度和方向等信息。

cv::DMatch:用于表示特征匹配的结果,包含匹配的特征点索引和距离等信息。
详细解释每个数据类型

一、cv::Mat 是 OpenCV 中用于表示图像和矩阵的类。它提供了一个灵活的多维数组结构,可以存储像素值或其他数值数据,并且支持各种常见的图像处理和矩阵操作。

以下是 cv::Mat 常用的用法和操作:

(1)创建 cv::Mat 对象:

cv::Mat image; // 创建一个空的 Mat 对象
cv::Mat image(rows, cols, type); // 创建指定行数、列数和数据类型的 Mat 对象
cv::Mat image(size, type); // 创建指定尺寸和数据类型的 Mat 对象
cv::Mat image(rows, cols, type, scalar); // 创建指定行数、列数、数据类型和初始值的 Mat 对象
```

(2)访问和操作 cv::Mat 中的像素值:

// 读取像素值
cv::Scalar pixel = image.at<cv::Scalar>(row, col);

// 修改像素值
image.at<cv::Scalar>(row, col) = cv::Scalar(b, g, r);

//访问mat对象的scalar,

//也就是访问指定位置point处的scalar内容,在图像中对应的内容就是像素值
```

 (3)获取图像的属性:

int rows = image.rows; // 获取图像的行数
int cols = image.cols; // 获取图像的列数
int channels = image.channels(); // 获取图像的通道数
int type = image.type(); // 获取图像的数据类型
```

 (4)复制和赋值 cv::Mat 对象

cv::Mat imageCopy = image.clone(); // 复制一个 Mat 对象
cv::Mat imageCopy2;
image.copyTo(imageCopy2); // 将一个 Mat 对象复制到另一个 Mat 对象
```

这两行代码用于复制一个 cv::Mat 对象到另一个对象,实现深拷贝。

  1. cv::Mat imageCopy = image.clone();:这行代码创建了一个名为 imageCopy 的新的 cv::Mat 对象,并将其初始化为原始图像 image 的副本。clone() 函数会复制整个图像数据,并创建一个新的独立的 cv::Mat 对象,两个对象之间没有共享数据。这意味着对 imageCopy 的修改不会影响原始图像 image

  2. cv::Mat imageCopy2; image.copyTo(imageCopy2);:这两行代码实现了将一个 cv::Mat 对象复制到另一个对象 imageCopy2copyTo() 函数会将原始图像 image 的数据复制到 imageCopy2 中,并创建一个新的独立的 cv::Mat 对象,两个对象之间没有共享数据。与使用 clone() 相似,这样复制的对象之间的修改互不影响。

这两种方法都实现了对 cv::Mat 对象的复制,但使用的语法略有不同。clone() 函数将复制的对象作为函数的返回值返回,可以直接赋值给一个新的变量。而 copyTo() 函数需要提供要复制到的目标对象作为参数。

这些复制操作对于需要对图像进行并行处理、避免共享数据引起的竞争条件、或者简单地创建一个独立的图像副本以供后续操作使用时非常有用。

(5) 转换图像的数据类型:

cv::Mat imageFloat;
image.convertTo(imageFloat, CV_32F); // 将图像转换为指定的数据类型
```

(6) 加载和保存图像:

cv::Mat image = cv::imread("image.jpg"); // 加载图像
cv::imwrite("output.jpg", image); // 保存图像
```

 (7)对图像进行常见的处理操作,如绘制图形、调整大小、转换颜色空间和滤波等。

二、cv::Point 类解释

cv::Point 是坐标值,成员变量为.x,.y,.z。可以通过成员变量访问和赋值。

(1)cv::Point 类有以下几种数据类型:

  1. cv::Point_<int>: 表示二维平面上的整数坐标点。它包含 x 和 y 两个整数成员变量。

  2. cv::Point2f 或 cv::Point_<float>: 表示二维平面上的浮点数坐标点。它包含 x 和 y 两个浮点数成员变量。

  3. cv::Point2d 或 cv::Point_<double>: 表示二维平面上的双精度浮点数坐标点。它包含 x 和 y 两个双精度浮点数成员变量。

  4. cv::Point2i 或 cv::Point_<int>: 表示二维平面上的整数坐标点。它包含 x 和 y 两个整数成员变量。

  5. cv::Point3f 或 cv::Point3_<float>: 表示三维空间中的浮点数坐标点。它包含 xy 和 z 三个浮点数成员变量。

  6. cv::Point3d 或 cv::Point3_<double>: 表示三维空间中的双精度浮点数坐标点。它包含 xy 和 z 三个双精度浮点数成员变量。

这些不同的数据类型允许使用不同的数值精度来表示点的坐标。根据具体的应用需求和数据类型的选择,可以使用适当的 cv::Point 类型来表示和操作二维或三维空间中的点。

cv::Point pt;//通过默认构造函数创建一个点对象,

//这将创建一个未初始化的点对象,坐标值默认为 (0,0)。

cv::Point ht(x, y);//新的声明

//这将创建一个点对象,并将 x 和 y 坐标分别设置为指定的值。

//使用成员变量直接访问和修改坐标值:

ht.x = new_x;
ht.y = new_y;

//进行点的操作和计算

cv::Point sum = pt1 + pt2;
cv::Point diff = pt1 - pt2;

cv::Point scaled = pt * scale_factor;
cv::Point translated = pt + cv::Point(trans_x, trans_y);

//点的距离计算:

double distance = cv::norm(pt1 - pt2);

//这行代码使用了 OpenCV 中的 cv::norm() 函数来计算两个点 pt1 和 pt2 之间的欧氏距离。

//欧氏距离是最常用的距离度量方式,它衡量两点之间的直线距离。

//对于二维平面上的点,欧氏距离的计算公式为:

distance = sqrt((x2 - x1)^2 + (y2 - y1)^2);

//其中 (x1, y1) 和 (x2, y2) 分别是点 pt1 和 pt2 的坐标。

//在这行代码中,pt1 - pt2 表示两个点的坐标差,即 (pt1.x - pt2.x, pt1.y - pt2.y)

//然后,cv::norm() 函数接收这个坐标差作为参数,计算并返回这两个点之间的欧氏距离,

//并将结果赋值给 double 类型的变量 distance

//通过这行代码,可以方便地计算出两个点之间的欧氏距离,

//用于距离度量、相似性比较、特征匹配等图像处理和计算机视觉任务中的应用。

三、  cv::Rect:表示矩形区域。它由矩形左上角的坐标和宽度、高度组成。

cv::Rect 是 OpenCV 中用于表示矩形区域的类。它由矩形左上角的坐标和宽度、高度组成。cv::Rect 类的详细解释如下:

  1. 成员变量:

    • x: 矩形左上角的 x 坐标(整数)。
    • y: 矩形左上角的 y 坐标(整数)。
    • width: 矩形的宽度(整数)。
    • height: 矩形的高度(整数)。
  2. 构造函数:

    • Rect(): 默认构造函数,创建一个未初始化的矩形对象,左上角坐标为 (0,0),宽度和高度为 0。
    • Rect(int x, int y, int width, int height): 构造函数,根据指定的左上角坐标、宽度和高度创建矩形对象。
  3. 成员函数:

    • area(): 返回矩形的面积,即宽度乘以高度。
    • empty(): 判断矩形是否为空,即宽度或高度是否为 0。
    • contains(Point pt): 判断给定的点是否在矩形范围内。
    • contains(int x, int y): 判断给定的坐标是否在矩形范围内。
    • tl(): 返回矩形的左上角坐标(cv::Point 类型)。
    • br(): 返回矩形的右下角坐标(cv::Point 类型)。

cv::Rect 类提供了一种方便的方式来表示和操作矩形区域。通过使用矩形的左上角坐标、宽度和高度,可以定义和描述矩形区域的位置和尺寸。cv::Rect 类的成员变量和成员函数使得可以轻松地创建矩形对象、计算矩形的面积、判断点或坐标是否在矩形内部,并获取矩形的角点坐标。这些功能对于图像处理、计算机视觉和计算机图形学中的对象定位、区域选择、裁剪等任务非常有用。

四、 cv::Size:表示对象或区域的尺寸。它包含宽度和高度,以整数值表示。

cv::Size 和 cv::Rect 是 OpenCV 中用于表示尺寸和矩形区域的类,它们有一些区别和不同的用途。

  1. cv::Size:表示对象或区域的尺寸,包含宽度和高度,以整数值表示。cv::Size 是一个简单的尺寸类,用于表示宽度和高度这两个维度上的尺寸信息。它可以用于描述图像、窗口、区域等的大小,但不包含位置信息。宽度和高度的值是独立的,没有与特定坐标相关联。

  2. cv::Rect:表示矩形区域,由矩形左上角的坐标和宽度、高度组成。cv::Rect 是一个矩形区域类,用于表示具有位置和大小信息的矩形区域。它包含了矩形左上角的坐标(x 和 y)以及矩形的宽度和高度(width 和 height)。通过这些信息,可以确定矩形在图像或其他坐标系统中的位置和大小。

总结:

  • cv::Size 主要用于描述对象或区域的尺寸,只包含宽度和高度信息,没有位置信息。
  • cv::Rect 用于描述矩形区域,除了包含宽度和高度信息外,还包含了矩形左上角的坐标信息,可以确定矩形在坐标系统中的位置。

五、 cv::Scalar:用于表示多通道数据,例如颜色值,包含一个或多个数值。

cv::Scalar 是 OpenCV 中用于表示多通道数据的类,通常用于表示颜色。它可以包含一个或多个数值,每个数值对应一个通道。cv::Scalar 类的详细解释如下:

  1. 成员变量:

    • val[4]:一个长度为4的数组,用于存储多个数值。数组的大小取决于通道的数量。
  2. 构造函数:

    • Scalar(): 默认构造函数,创建一个未初始化的 cv::Scalar 对象。
    • Scalar(double v0): 构造函数,创建一个包含一个数值的 cv::Scalar 对象。
    • Scalar(double v0, double v1): 构造函数,创建一个包含两个数值的 cv::Scalar 对象。
    • Scalar(double v0, double v1, double v2): 构造函数,创建一个包含三个数值的 cv::Scalar 对象。
    • Scalar(double v0, double v1, double v2, double v3): 构造函数,创建一个包含四个数值的 cv::Scalar 对象。
  3. 成员函数:

    • operator[](int i): 重载下标运算符,用于访问 val 数组中的元素。

cv::Scalar 类提供了一种方便的方式来表示多通道数据,特别适用于表示颜色。每个数值对应一个通道,可以表示像素的红、绿、蓝(RGB)分量或其他类型的多通道数据。cv::Scalar 对象可以通过构造函数创建,并且可以直接访问其中的数值。该类的设计使得它可以与其他 OpenCV 函数和类一起使用,用于处理多通道数据,如图像处理、颜色空间转换、图像绘制等任务。

需要注意的是,cv::Scalar 类的大小取决于通道数,不同的 OpenCV 版本可能对通道数有不同的限制。通常,它可以包含1到4个数值,对应于1到4个通道。在使用时,应根据实际需求选择合适的通道数和数值。

六、cv:: Vec解释

  1. cv::Vec2fcv::Vec3fcv::Vec4f

    • cv::Vec2f 表示一个包含两个浮点数的向量。
    • cv::Vec3f 表示一个包含三个浮点数的向量。
    • cv::Vec4f 表示一个包含四个浮点数的向量。
  2. cv::Vec2icv::Vec3icv::Vec4i

    • cv::Vec2i 表示一个包含两个整数的向量。
    • cv::Vec3i 表示一个包含三个整数的向量。
    • cv::Vec4i 表示一个包含四个整数的向量。
  3. cv::Vec2dcv::Vec3dcv::Vec4d

    • cv::Vec2d 表示一个包含两个双精度浮点数的向量。
    • cv::Vec3d 表示一个包含三个双精度浮点数的向量。
    • cv::Vec4d 表示一个包含四个双精度浮点数的向量。

这些向量类提供了一种方便的方式来表示和操作具有固定数量元素的向量数据。它们可以存储和访问不同类型的元素,如浮点数、整数和双精度浮点数。这些向量类通常用于表示像素的颜色值、坐标点、尺寸和其他具有固定元素数量的数据。

与其他 OpenCV 类的关系如下:

  • cv::Matcv::Mat 是 OpenCV 中用于表示矩阵的类。它可以包含任意数量的行和列,并且可以用于存储和处理各种类型的数据,包括向量。向量类(如 cv::Vec2fcv::Vec3i 等)可以作为 cv::Mat 的元素类型,从而可以在矩阵中存储和操作向量数据。
  • cv::Pointcv::Point 是 OpenCV 中用于表示二维坐标点的类。它实际上是 cv::Point_ 类的别名,其中 _ 表示点的数据类型(例如 cv::Point2fcv::Point2i 等)。cv::Point 类可以包含两个元素,分别表示 x 和 y 坐标。cv::Vec2icv::Vec2f 等向量类可以用于表示和操作二维坐标点。
  • cv::Rectcv::Rect 是 OpenCV 中用于表示矩形区域的类,由矩形左上角的坐标和宽度、高度组成。与向量类不同,cv::Rect 类具有特定的含义和功能,用于表示和操作矩形区域的位置和尺寸。
  • cv::Sizecv::Size 是 OpenCV 中用于表示对象或区域尺寸的类,由宽度和高度组成。与向量类不同,cv::Size 类只关注尺寸信息,而不包含位置或坐标信息。
  • cv::Scalarcv::Scalar 是 OpenCV 中用于表示多通道数据的类,通常用于表示颜色。它可以包含一个或多个数值,每个数值对应一个通道。与向量类不同,cv::Scalar 类主要用于表示和操作颜色值等多通道数据。

这些类可以根据具体的需求选择使用,用于表示和操作不同类型的数据,如图像、向量、点、矩形和尺寸等。它们在 OpenCV 中提供了方便的数据结构,以便进行图像处理、计算机视觉和图形操作等任务。

cv::Vec 是 OpenCV 中用于表示固定大小的向量的模板类。它可以表示包含固定数量元素的向量,每个元素可以是不同的数据类型(例如整数、浮点数等)。

cv::Vec 的模板参数包括两个部分:元素类型和元素数量。例如,cv::Vec<float, 3> 表示一个包含三个浮点数的向量,cv::Vec<int, 4> 表示一个包含四个整数的向量。

cv::Vec 类提供了以下功能:

  1. 成员变量:val[n],其中 n 是向量的元素数量。val 是一个数组,用于存储向量的元素值。

  2. 构造函数:cv::Vec<T, n>() 是默认构造函数,创建一个未初始化的向量对象。cv::Vec<T, n>(v0, v1, ...) 是带有初始值的构造函数,创建一个包含指定初始值的向量对象。

  3. 成员函数:operator[] 是重载的下标运算符,用于访问向量的元素。

通过使用 cv::Vec,可以创建并操作固定大小的向量。它在表示和处理像素颜色、坐标点、特征向量等数据时非常有用。此外,cv::Vec 还可以与其他 OpenCV 函数和类一起使用,例如在图像处理、计算机视觉和图形操作中。

需要注意的是,cv::Vec 是一个模板类,它在编译时会根据指定的元素类型和元素数量生成具体的向量类。这意味着不同的 cv::Vec 实例是不兼容的,即使它们具有相同的元素类型和数量。例如,cv::Vec<float, 3> 和 cv::Vec<float, 4> 是不同的类型,不能直接进行赋值或比较操作。

 文章来源地址https://www.toymoban.com/news/detail-803336.html

 

到了这里,关于OpenCV中有许多常用的数据类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《数字图像处理-OpenCV/Python》连载(10)图像属性与数据类型

    本书京东优惠购书链接:https://item.jd.com/14098452.html 本书CSDN独家连载专栏:https://blog.csdn.net/youcans/category_12418787.html 在Python语言中,OpenCV以Numpy数组存储图像,对图像的访问和处理都是通过Numpy数组的操作来实现的。 本章内容概要 介绍Python语言中OpenCV的数据结构,学习获取图像

    2024年02月07日
    浏览(45)
  • OpenCV中Mat、Ipllmage以及Halcon中Hobject数据类型之间转换

    OpenCV中Mat、CVMat、Ipllmage类型都可以代表和显示图像。IplImage是由CVMat派生,而CvMat由CvArr派生即CvArr - CvMat - IplImage,Mat类型则是C++版本的矩阵类型(CvArr用作函数的参数,无论传入的是CvMat或IplImage,内部都是按CvMat处理)。 Mat类型侧重于计算,数学性较高; 而CvMat和IplImage类型

    2024年02月10日
    浏览(26)
  • OpenCV数据类型及CV_16UC1深度图ros订阅

    最近用到深度图,对其数据类型及显示有些迷惑,记笔记于此:

    2024年02月05日
    浏览(30)
  • [OpenCV] CV_32F与CV_8U之间的数据类型转换

    最近在c++使用OpenCV时,总会因为类型转换为发生图片颜色错误,在网上查了些方法都不适用,总结下自己探索的经验。 经常使用的是8UC(n)与32FC(n),其中8U在0-255之间使用整数对应颜色,32F在0-1之间使用小数对应颜色; 在使用 converTo() 进行数据类型转换时,数据值并不会发生内

    2024年02月12日
    浏览(44)
  • VS+Opencv出现:位于 OpenCVTest.exe 中有未经处理的异常: Microsoft C++ 异常: std::bad_alloc,位于内存位置 0x0000003898FBEC70处

    0x00007FF98F394F69 处(位于 OpenCVTest.exe 中)有未经处理的异常: Microsoft C++ 异常: std::bad_alloc,位于内存位置 0x0000003898FBEC70 处。 [ WARN:0@0.111] global c:buildmaster_winpack-build-win64-vc15opencvmodulesimgcodecssrcloadsave.cpp (239) cv::findDecoder imread_(\\\'   C:UsersAdministratorsourcereposOpenCVTestx64DebugOpe

    2024年02月03日
    浏览(33)
  • OpenCV 4基础篇| 色彩空间类型转换

    RGB 图像是一种比较常见的色彩空间类型,除此之外,比较常见的还有以下类型: GRAY 色彩空间(即灰度图像) 、 XYZ 色彩空间 、 YCrCb 色彩空间 、 HSV 色彩空间 、 HLS 色彩空间 、 CIELab 色彩空间 、 CIELuv 色彩空间 等,这些不同的色彩空间,是根据不同角度进行定义的,比如从

    2024年02月21日
    浏览(28)
  • OpenCV-Python学习(17)—— OpenCV 图像像素类型转换与归一化(cv.normalize)

    1. 学习目标 学习 OpenCV 图像像素的类型转换; 学习 OpenCV 归一化函数。 2. OpenCV 图像像素的类型转换 由于【在 OpenCV-Python 中一切图像数据皆 numpy.array】,因此像素的类型转换可以直接使用 numpy 的类型转换方法。 2.1 将像素转换为 float32 2.2 数据输出结果 2.3 图像输出结果 3. 归一

    2024年02月05日
    浏览(53)
  • Eigen 类型三维点的世界坐标转换为 OpenCV Mat 类型

    cv::Mat WorldPos; :这行代码声明了一个 OpenCV Mat 对象 WorldPos ,用于存储三维点在世界坐标系下的位置。 cv::eigen2cv(pMP-

    2024年02月12日
    浏览(35)
  • OpenCV中常用的函数

    OpenCV是一个功能强大的计算机视觉库,提供了众多用于图像处理、计算机视觉和机器学习的函数和模块。以下是一些OpenCV中常用的函数和模块的子集: 图像读取和显示 : cv::imread :用于读取图像文件。 cv::imshow :用于显示图像。 cv::imwrite :用于保存图像。 cv::destroyAllWindow

    2024年02月11日
    浏览(15)
  • opencv常用编译选项

    每个模块都是该modules目录的一个子目录。可以禁用一个模块: 相反的选项是只构建指定的模块和它们依赖的所有模块: 在此示例中,我们请求了 3 个模块,配置脚本已自动确定所有依赖项: 配置脚本可以尝试从互联网上下载额外的库和文件,如果失败,相应的功能将被关闭

    2024年02月13日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包