专栏简介 | ||
💒个人主页 📰专栏目录 点击上方查看更多内容 | 📖心灵鸡汤📖 我们唯一拥有的就是今天,唯一能把握的也是今天 建议把本文当作笔记来看,据说专栏目录里面有相应视频🤫 | 🧭文章导航🧭 ⬆️ 7.Mat之转换、重塑与计算 ⬇️ 9.待更新 |
Mat之多维元组(Tuple)
- 一、 Mat.Atable<T>
- 1.Mat.Atable介绍
- 2.方法介绍
- 二、Mat.Tuple
- 1.Mat.Tuple4<T> 介绍
- 1.构造函数
- 2.方法介绍
- 三、元素操作
- 1.<T> Mat.Atable<T> at(java.lang.Class<T> clazz, int[ ] idx)
本节内容了解即可!!!
在Mat类中,我们看到有这样两个方法。返回的对象是
<T> Mat.Atable<T>
这两个方法可以用来获取指定位置的像素值。同时可以指定要获取的元素值的类型(指定的类型需要和矩阵的数据类型对应才行
)。并且可以通过返回的对象对该位置的像素值进行精细
处理。
一、 Mat.Atable
1.Mat.Atable介绍
在此之前我们先了解下<T> Mat.Atable<T>
我们可以看出,它是位于Mat类中的一个接口,这个接口允许你以各种组合形式获取和设置矩阵元素。然而,请注意,虽然这个接口定义了这些方法,但具体如何实现这些方法取决于具体实现这个接口的类。如下所示
2.方法介绍
相关方法作用如下图所示:
二、Mat.Tuple
它是一个嵌套类。有Tuple2、Tuple3、Tuple4 这三个类,分别用来表示一个具有两个元素、三个元素、四个元素的元组。它用于表示图像中的像素值。
1.Mat.Tuple4 介绍
我们以Mat.Tuple4<T>
为例进行说明。
作用:
存储像素值:在图像处理中,Mat.Tuple4可以用来存储每个像素点的像素值,包括多个通道的值。
访问像素值:可以通过Mat.Tuple4的方法获取和修改元组中每个通道的值,进行像素级的操作和处理。
处理多通道图像:对于多通道的图像,Mat.Tuple4提供了方便的数据结构,可以方便地处理和操作多通道图像数据。
1.构造函数
通过构造函数,可以看出,接受两个参数,分别代表元组中的四个元素。_0, _1,_2,_3 可以用来分别表示图像中的红、绿、蓝、透明度这四个通道。
2.方法介绍
直接上图了,比较容易理解
三、元素操作
了解之后我们演示下使用示例。
1. Mat.Atable at(java.lang.Class clazz, int[ ] idx)
Mat.Atable at(java.lang.Class clazz, int[] idx) | |
参数: | |
clazz | 指定获取值的类型,可以是Byte.class、Short.class、Integer.class、Float.class或Double.class |
idx | 指定像素的位置,以数组形式表示 |
public class MatExample {
public static void main(String[] args) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat mat = new Mat(1,2,CvType.CV_32FC4);
mat.put(0,0,1,2,3,4,5,6,7,8);
System.out.println("mat.dump() = \n" + mat.dump());
Mat.Atable<Float> at = mat.at(Float.class, 0, 0);
//获取像素值
Mat.Tuple4<Float> v4c = at.getV4c();
System.out.println("B通道值 = " + v4c.get_0());
System.out.println("G通道值 = " + v4c.get_1());
System.out.println("R通道值 = " + v4c.get_2());
System.out.println("透明度 = " + v4c.get_3());
//设置值
Mat.Tuple4<Float> tuple4 = new Mat.Tuple4<>(11f,22f,33f,44f);
at.setV4c(tuple4);
System.out.println("mat.dump() = \n" + mat.dump());
}
}
结果:
mat.dump() =
[1, 2, 3, 4, 5, 6, 7, 8]
B通道值 = 1.0
G通道值 = 2.0
R通道值 = 3.0
透明度 = 4.0
mat.dump() =
[11, 22, 33, 44, 5, 6, 7, 8]