专栏简介 | ||
💒个人主页 📰专栏目录 点击上方查看更多内容 | 📖心灵鸡汤📖 我们唯一拥有的就是今天,唯一能把握的也是今天 | 🧭文章导航🧭 ⬆️ 2.hello openCV ⬇️ 4.待更新 |
数据类型(CvType)与Scalar
- 一、CvType
- 1.数据类型
- 2.方法介绍
- 1.channels(int type)
- 2.CV_8UC(int ch)
- 3.depth(int type)
- 4. ELEM_SIZE(int type)
- 5.isInteger(int type)
- 6. makeType(int depth, int channels)
- 7.typeToString(int type)
- 二、Scalar
- 1.构造函数
- 2.方法介绍
- 1.all(double v)
- 2.clone()
- 3.conj()
- 4.equals(java.lang.Object obj)
- 5.hashCode()
- 6.⚠️isReal()
- 7.mul(Scalar it)
- 8.mul(Scalar it, double scale)
- 9.set(double[ ] vals)
上一节我们简单的了解了下数据类型,这里我们说下CvType类中的函数作用和Scalar对象
一、CvType
📢一个常量类,用于指定矩阵的数据类型和通道数。它提供了多种预定义的数据类型,例如 CV_8U(8位无符号整数)、CV_32F(32位浮点数)
1.数据类型
F 表示浮点数,S 表示有符号整数,U 表示无符号整数,C1…C4 表示单通道…四通道
2.方法介绍
示例已贴出,请自行验证
1.channels(int type)
获取给定数据类型对应的通道数。
System.out.println("通道数= " + CvType.channels(CvType.CV_8SC4));
2.CV_8UC(int ch)
给定一个通道数,创建换一个与之相应的数据类型,其它类似的函数作用是一样的,比如CV_16FC(int ch)
、CV_32SC(int ch)
等方法。
Mat mat = new Mat(3,3,CvType.CV_8UC(3));
如示例所示,CvType.CV_8UC(3)
等同于CvType.CV_8UC3
3.depth(int type)
获取深度值,即获取对应的数据类型,返回一个int值。
CvType.depth(CvType.CV_8UC3);
如示例所示,返回的深度值为0
,关于其它数据类型对应的值我们可以在jar包中找到,如下所示:
4. ELEM_SIZE(int type)
获取给定数据类型每个元素的大小。元素大小是描述矩阵或数组元素类型的另一个组成部分,用于确定每个元素所需的存储空间。
例如,对于一些常见的数据类型,ELEM_SIZE(int type) 的返回值可能是:
对于 8 位无符号整数类型(如 CV_8UC1),返回值为 1,因为每个元素占用 1 字节。
对于 32 位浮点数类型(如 CV_32FC1),返回值为 4,因为每个元素占用 4 字节。
对于 64 位浮点数类型(如 CV_64FC1),返回值为 8,因为每个元素占用 8 字节。
System.out.println("CvType.CV_8UC3 = " + CvType.ELEM_SIZE(CvType.CV_8UC3));
这里仅提供一个示例,请验证下其它数据类型的字节大小
5.isInteger(int type)
判断数据类型是否为整数类型。
System.out.println("CvType.isInteger(CvType.CV_8UC1) = " + CvType.isInteger(CvType.CV_8UC1));System.out.println("CvType.isInteger(CvType.CV_16FC1) = " + CvType.isInteger(CvType.CV_16FC1));
6. makeType(int depth, int channels)
根据指定的深度和通道数创建一个数据类型。
Mat mat = new Mat(3,3,CvType.makeType(CvType.CV_8U,1));
如示例所示CvType.makeType(CvType.CV_8U,1)
等同于CvType.CV_8UC1
等同于CvType.CV_8UC(1)
7.typeToString(int type)
将给定的数据类型转换为对应的字符串表示形式
二、Scalar
Scalar类的作用包括:
表示颜色:
Scalar类可以用于表示颜色,可以通过指定蓝、绿、红三个分量的数值来表示一个颜色。例如,Scalar(255, 0, 0)表示蓝色,Scalar(0, 255, 0)表示绿色,Scalar(0, 0, 255)表示红色。
表示灰度值:
Scalar类也可以用于表示灰度颜色空间中的颜色,只需指定一个数值即可。例如,Scalar(128)表示灰度值为128的颜色。
总之,Scalar类是OpenCV中用于表示颜色的类,可以用于表示BGR颜色和灰度颜色,并且支持一些基本的运算。
1.构造函数
v0,v1,v2,v3分别表示蓝色通道值、绿色通道值、红色通道值、透明度
2.方法介绍
比较简单的方法就不列举示例了。请自行验证
1.all(double v)
创建一个具有相同值的Scalar对象
System.out.println("Scalar.all(10) = " + Scalar.all(10));
创建一个所有通道都是10的Scalar对象
2.clone()
创建并返回当前 Scalar 对象的一个副本。
3.conj()
返回一个共轭的Scalar对象。共轭在当前是指即具有相同信息(元素值)同时也具有与之对应信息(元素值)的两个对象。如下所示(示例仅用于演示,不考虑数据的合理性
)
Scalar scalar = new Scalar(1,2,3,4);Scalar conj = scalar.conj();System.out.println("scalar = " + scalar);System.out.println("conj = " + conj);
结果如下
scalar = [1.0, 2.0, 3.0, 4.0]
conj = [1.0, -2.0, -3.0, -4.0]
4.equals(java.lang.Object obj)
比较两个Scalar对象是否相等
5.hashCode()
返回对象的哈希码值
6.⚠️isReal()
判断通道是否含有实数。这个函数有点特殊。我们查看源码
public boolean isReal() {return this.val[1] == 0.0 && this.val[2] == 0.0 && this.val[3] == 0.0;}
可以看出,它只判断v1,v2,v3通道全为0时返回true,不包含v0,这样的话,我们也可以用它判断是不是灰度值。请自行验证,这里就不举例了
7.mul(Scalar it)
当前Scalar对象的每个分量与另一个Scalar对象的对应分量进行乘法运算
Scalar scalar = new Scalar(1,2,3,4);Scalar scalar_mum = new Scalar(1,2,3,4);Scalar mul = scalar.mul(scalar_mum);System.out.println("mul = " + mul);
结果
mul = [1.0, 4.0, 9.0, 16.0]
8.mul(Scalar it, double scale)
对当前对象进行乘法运算,与上面方法不同的是,在进行乘法运算后,再对每个分量值与scale值进行乘法运算。请自行验证
9.set(double[ ] vals)
设置Scalar值,接受的 是一个double对象,其中的值按顺序分别代表v0,v1,v2,v3的值
Scalar scalar = new Scalar(1,2,3,4);double [] vals = {2,3,4,5};scalar.set(vals);