9.java openCV4.x 入门-特殊的Mat类汇总(一)

专栏简介

💒个人主页
📰专栏目录

点击上方查看更多内容
📖心灵鸡汤📖

我们唯一拥有的就是今天,唯一能把握的也是今天


建议把本文当作笔记来看,据说专栏目录里面有相应视频🤫
🧭文章导航🧭
⬆️ 8.Mat之多维元组(Tuple)
⬇️ 10.特殊的Mat类汇总(二)


     📢 提前对特殊的Mat类(嵌套类)进行说明,后面遇到的时候就不再单独去说了。

特殊的Mat类汇总

   本节中列举的所有类的作用都可以用于读取和写入图像的不同类型的数据。

一、MatOfByte

   一个特殊的Mat类,用于存储图像的字节(byte)数据

1.构造函数

在这里插入图片描述

  1. 创建一个MatOfByte对象,并初始化其数据。
MatOfByte​(int offset, int length, byte... a)
参数:
offset 表示从数组a的哪个位置开始拷贝数据
length拷贝的数据长度
a 要拷贝的字节数组
   通过这个构造函数,可以将一个字节数组的一部分数据拷贝到MatOfByte对象中,用于表示图像或矩阵的字节数据。
        byte data[]={1,2,3,4,5,6};
        //从data数组的第3个位置开始拷贝,拷贝3个
        MatOfByte matOfByte= new MatOfByte(2,3,data);
        System.out.println("matOfByte.dump() :\n" + matOfByte.dump());

2.将给定的Mat对象转换为MatOfByte对象

MatOfByte​(Mat m)
参数:
m mat对象
  根据源码mat对象数据类型须是CV_8UC1,且为1行多列或1列多行的数据格式,(不过经过验证其它单通道类型的数据也是可以的)。
源码:
    public MatOfByte(Mat m) {
        super(m, Range.all());
        if( !empty() && checkVector(_channels, _depth) < 0 )
            throw new IllegalArgumentException("Incompatible Mat");
        //FIXME: do we need release() here?
    }

示例:

        Mat mat = new Mat(1,3, CvType.CV_8UC1);
        mat.put(0,0,1,2,3);
        //将mat转换为MatOfByte对象
        MatOfByte matOfByte= new MatOfByte(mat);
        System.out.println("matOfByte.dump() :\n" + matOfByte.dump());

2.方法介绍

1.alloc​

   这个方法的作用是为MatOfByte对象分配足够的内存空间来存储指定数量的元素。这个方法可以用于在创建MatOfByte对象之后,为其分配所需的内存空间。
   例如,如果你知道你将要存储100个字节数据,你可以调用alloc(100)来为MatOfByte对象分配足够的内存空间,以便能够存储这100个字节。这样,你就可以在MatOfByte对象中存储字节数据了

2.fromArray​​

   将给定的字节数组转化为MatOfByte对象
1.

fromArray​(byte... a)
参数:
a 字节数据
2.
fromArray​(int offset, int length, byte... a)
参数:
offset 表示从数组a的哪个位置开始拷贝数据
length拷贝的数据长度
a 要拷贝的字节数组

3.fromList​

   用于将 List 类型的数据转换为 MatOfByte 对象。

        //创建一个空的matOfByte
        MatOfByte matOfByte= new MatOfByte();
        //创建bl集合
        List bl =new ArrayList<>();
        bl.add((byte) 1);
        bl.add((byte) 2);
        bl.add((byte) 3);
        matOfByte.fromList(bl);
        System.out.println("matOfByte.dump() :\n " + matOfByte.dump());

4.toArray

   将MatOfByte对象转换为byte数组

5.toList

   将MatOfByte对象转换为byte集合

二、MatOfDouble

   通过使用MatOfDouble类,可以方便地进行双精度浮点数类型的矩阵数据的处理和操作

1.构造函数

   这里只列举其中一个构造函数。

MatOfDouble​(Mat m)
参数:
m mat对象-mat数据类型需为CV_64FC1,且需要1行或1列
        Mat mat = new Mat(1,3, CvType.CV_64FC1);
        mat.put(0,0,1,2,3);
        System.out.println("mat.dump() :\n " + mat.dump());
        MatOfDouble matOfDouble = new MatOfDouble(mat);
        System.out.println("matOfDouble.dump() :\n " + matOfDouble.dump());

2.方法介绍

   参考MatOfByte-方法介绍

三、MatOfFloat

   MatOfFloat类的主要作用是提供了一种方便的方式来表示和操作浮点数类型的矩阵数据

1.构造函数

   这里只列举其中一个构造函数。

MatOfFloat​(Mat m)
参数:
m mat对象-mat数据类型需为 CV_32FC1,且需要1行或1列
   Mat mat=new Mat(1,3, CvType.CV_32FC1);
        mat.put(0,0,1,2,3);
        MatOfFloat matOfFloat=new MatOfFloat(mat);
        System.out.println("matOfFloat.dump() :\n " + matOfFloat.dump());

2.方法介绍

   参考MatOfByte-方法介绍

四、MatOfFloat4

   MatOfFloat4类可以用来存储4个浮点数的矩阵

1.构造函数

   这里只列举其中一个构造函数。

MatOfFloat4​(Mat m)
参数:
m mat对象-mat数据类型需为 CV_32FC4,且需要1行或1列
  Mat mat=new Mat(1,3, CvType.CV_32FC4);
        MatOfFloat4 matOfFloat=new MatOfFloat4(mat);
        System.out.println("matOfFloat4.dump() :\n " + matOfFloat.dump());

2.方法介绍

   参考MatOfByte-方法介绍

五、MatOfFloat6

   MatOfFloat6类可以用来存储6个浮点数的矩阵

1.构造函数

   这里只列举其中一个构造函数。

MatOfFloat6​(Mat m)
参数:
m mat对象-mat数据类型需为 CV_32FC(6),且需要1行或1列
       Mat mat=new Mat(3,1, CvType.CV_32FC(6));
        MatOfFloat6 matOfFloat=new MatOfFloat6(mat);
        System.out.println("matOfFloat6.dump() :\n " + matOfFloat.dump());

2.方法介绍

   参考MatOfByte-方法介绍

六、MatOfInt

   MatOfInt类是用来表示一个整数类型的矩阵

1.构造函数

   这里只列举其中一个构造函数。

MatOfInt​(Mat m)
参数:
m mat对象-mat数据类型需为 CV_32SC1,且需要1行或1列
        Mat mat=new Mat(1,3, CvType.CV_32SC1);
        MatOfInt matOfInt=new MatOfInt(mat);
        System.out.println("matOfInt.dump() :\n " + matOfInt.dump());

2.方法介绍

   参考MatOfByte-方法介绍

七、MatOfInt4

   MatOfInt4用来存储和操作四个整数类型的矩阵

1.构造函数

   这里只列举其中一个构造函数。

MatOfInt4​(Mat m)
参数:
m mat对象-mat数据类型需为 CV_32SC4,且需要1行或1列
            Mat mat=new Mat(3,1, CvType.CV_32SC4);
            MatOfInt4 matOfInt=new MatOfInt4(mat);
            System.out.println("matOfInt4.dump() :\n " + matOfInt.dump());

2.方法介绍

   参考MatOfByte-方法介绍

  • 26
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
OpenCV是一个基于开源许可的计算机视觉库,它包含了许多用于图像处理和计算机视觉的函数和。在OpenCV中,Mat是一个非常重要的,用于存储和处理图像数据。下面是关于OpenCV 4.x中Mat的详细介绍: MatOpenCV中用于存储和处理图像数据的主要,它是一个多维数组,可以表示单通道或多通道、灰度或彩色图像。Mat中的数据可以在内存中连续或不连续存储,可以是有符号整数、无符号整数、浮点数等型,支持大多数的像素格式。 在OpenCV中,Mat是一个模板,可以根据需要定义不同型的Mat对象。Mat的构造函数有多个参数,包括行数、列数、数据型等。可以使用Mat::zeros()函数和Mat::ones()函数来创建指定大小的全零或全一矩阵。还可以使用Mat::eye()函数来创建单位矩阵。 Mat提供了许多用于操作图像的函数和方法,例如Mat::rows()和Mat::cols()方法可以返回Mat对象的行数和列数;Mat::at()方法可以访问Mat对象的指定像素点;Mat::clone()方法可以复制一个Mat对象;Mat::convertTo()方法可以将Mat对象的数据型转换为指定型;Mat::reshape()方法可以改变Mat对象的形状等。 Mat还支持与其他Mat对象之间的运算,例如加、减、乘、除等。可以使用MatExpr来表示这些运算,例如MatExpr e = Mat1 + Mat2;表示将Mat1和Mat2进行加法运算,得到一个MatExpr对象e。还可以使用Mat::operator()方法来对Mat对象进行切片和子矩阵操作。 总之,OpenCV中的Mat是一个非常重要的,它提供了许多用于图像处理和计算机视觉的功能和方法,可以帮助开发者更方便地进行图像处理和计算机视觉的开发工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不要喷香水

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

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

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

打赏作者

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

抵扣说明:

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

余额充值