LabVIEW AI视觉工具包OpenCV Mat基本用法和属性

文章目录

  • 前言
  • 一、Mat的基本用法
    • 1、创建Mat对象
    • 2、释放 Mat 对象
  • 二、不同数据类型Mat对象的属性
    • 1、Mat对象基本属性
    • 2、Mat对象的数据属性
  • 总结

‍‍博客主页: virobotics的CSDN博客:LabVIEW深度学习、人工智能博主
所属专栏:『LabVIEW深度学习工具包』
上期文章: 【YOLOv5】LabVIEW+TensorRT的yolov5部署实战(含源码)
如觉得博主文章写的不错或对你有所帮助的话,还望大家多多支持呀! 欢迎大家✌关注、点赞、✌收藏、订阅专栏

前言

在 OpenCV 中,Mat 是一个非常重要的类,它代表了一个 n 维的稠密数组,其中每个元素都具有相同的数据类型。Mat 可以用来表示图像、矩阵、向量和其他数学对象,它支持多种数据类型,如整型、浮点型、布尔型等。

Mat 是 OpenCV 中的一个重要组件,几乎所有的图像处理和计算机视觉任务都涉及到它。因此,了解 Mat 的基本用法和属性是非常重要的。

本文主要和大家分享LabVIEW AI视觉工具包OpenCV Mat的基本用法和属性。

一、Mat的基本用法

1、创建Mat对象

可以使用Creat_mat.vi来创建一个空的 Mat 对象,也可以创建一个指定大小和数据类型的 Mat 对象。Creat_mat.vi数据类型选择8UC1_size,则可以创建一个灰度图Mat,选择8UC3_size,则可以创建某种颜色的彩图Mat,选择其他数据类型,则会创建一个空的Mat对象
LabVIEW AI视觉工具包OpenCV Mat基本用法和属性_第1张图片
Creat_mat.vi是一个多态VI,用于创建创建不同数据类型的Mat,即多维数组。

常用的数据类型包括:

  • 8U:8 位无符号整型,取值范围为 0 到 255。
  • 16U:16 位无符号整型,取值范围为 0 到 65535。
  • 16S:16 位有符号整型,取值范围为 -32768 到 32767。
  • 32S:32 位有符号整型,取值范围为 -2147483648 到 2147483647。
  • 32F:32 位浮点型,取值范围为 -3.4028235e+38 到 3.4028235e+38。
  • 64F:64 位浮点型,取值范围为 -1.7976931348623158e+308 到 1.7976931348623158e+308。

除了上述基本数据类型外,还支持复合数据类型,例如:

  • 8UC1_size:8 位无符号整型,1 个通道。
  • 8UC3_size:8 位无符号整型,3 个通道。

8U 表示 8 位无符号整型,C 表示通道数,1、3 分别表示通道数为 1、3。在创建 Mat 对象时,需要指定矩阵的数据类型,可根据实际所需数据类型来创建Mat。

多态VI概念:可以处理多种不同数据类型的VI被称为“多态VI”。多态VI根据输入或输出的 数据类型,再选择调用一个针对这种数据类型实现功能的VI,这些针对某种数据类型实现功能的VI称作“实例VI”。一般一个VI调用多个实例VI,简而言之:一个多态VI就是多个实例VI的封装和组合。

2、释放 Mat 对象

可以使用Release.vi释放Mat 对象占用的内存。

下面是一个示例代码,演示了如何创建和释放 Mat 对象:

  • 创建一个大小为480*640,数据类型为 8UC3 ,颜色为全红的RGB 彩色图像,代码如下:

LabVIEW AI视觉工具包OpenCV Mat基本用法和属性_第2张图片

  • 创建一个大小为480*640,数据类型为 8UC1 ,灰度为0的灰度图像,代码如下:

LabVIEW AI视觉工具包OpenCV Mat基本用法和属性_第3张图片

二、不同数据类型Mat对象的属性

Mat的属性可以由属性节点(property node.vi)获取,如数据类型为8U的Mat,有如下属性:
LabVIEW AI视觉工具包OpenCV Mat基本用法和属性_第4张图片

1、Mat对象基本属性

  • channels:通道数。

  • cols:矩阵的列数。

  • rows:矩阵的行数。

  • data_Pointer:矩阵中第一个元素的指针,可以通过该指针访问整个矩阵的数据。

  • dims:矩阵的维度,通常是 2 或 3。

  • elemSize:表示矩阵中每个元素所占用的字节数。它等于 elemSize1 * channels

  • elemSize1 :表示矩阵中每个元素的字节数(即数据类型大小),而 channels 是矩阵中的通道数。

例如:
如果 Mat 对象表示一个 3x3 的灰度图像,其数据类型为 8UC1(即 8 位无符号单通道图像),则 elemSize1为 1,channels 为 1,因此 elemSize 为 1。
如果 cv::Mat 对象表示一个 3x3 的 RGB彩色图像,其数据类型为 8UC3(即 8 位无符号三通道图像),则 elemSize1 为 8/8=1,channels 为3,因此 elemSize 为 3。
elemSize 在计算 cv::Mat 对象的内存大小时非常有用。矩阵的内存大小可以通过以下公式计算:
size_t size_in_bytes = rows * step; // 每行的字节数乘以行数

  • length:矩阵的大小,是一个一维数组,包含 rowscols

  • step:矩阵在内存中每一行的字节数,通常是一个包含两个或三个元素的整数数组,其中 step[0] 表示每行元素所占用的字节数,step[1]step[2] 分别表示相邻两行在内存中的地址偏移量。

  • total:矩阵中元素的总数,等于 cols * rows

  • type:矩阵的数据类型,表示矩阵中每个元素的数据类型。

2、Mat对象的数据属性

  • 1d_data:是一个一维数组,数组大小为cols * rows * channels,该数组中每一个元素都代表一个像素,对于灰度图像,像素用8位无符号数,0表示黑色,255表示白色。对于彩色像素而言,每个像素需要三位这样的8位无符号数来表示,即三个通道(R,G,B),数组则依次存储一个像素的三个通道的值,然后再存储下一个像素点。
  • 8UC1_data:是一个二维数组,数组行数为rows,列数为cols * channels,该数组中每一个元素都代表一个像素;
  • 8UC3_data:是一个二维数组,数组行数为rows,列数为cols * channels,该数组中每一个元素都代表一个像素;
  • image:LabVIEW自带的图片控件。
  • picture:二维图片,图片控件
  • U32_data:表示一个32位整型数组,数组行数为rows,列数为cols,用于存储图像中每个像素的颜色值。每个像素都由一组颜色值来表示,这些颜色值可以是灰度值、RGB值或其他颜色空间(RGBA)的值。该数组中每一个元素都代表一个像素;像素值由16进制表示

总结

以上就是今天要给大家分享的内容,希望对大家有用

如果文章对你有帮助,欢迎✌关注、点赞、✌收藏、订阅专栏

你可能感兴趣的:(LabVIEW深度学习工具包,人工智能,深度学习,opencv,计算机视觉,机器学习)