3.java openCV4.x 入门-数据类型(CvType)与Scalar

|------------------------------------------------------------------------------------------------------------------------------|---------------------------------|------------------------------------------------------------------------------------------------------|
| 专栏简介 |||
| 💒个人主页 📰专栏目录 点击上方查看更多内容 | 📖心灵鸡汤📖 我们唯一拥有的就是今天,唯一能把握的也是今天 | 🧭文章导航🧭 ⬆️2.hello openCV ⬇️4.待更新 |

数据类型(CvType)与Scalar

  • 一、CvType
    • 1.数据类型
    • 2.方法介绍
      • [1.channels​(int type)](#1.channels(int type))
      • [2.CV_8UC​(int ch)](#2.CV_8UC(int ch))
      • [3.depth​(int type)](#3.depth(int type))
      • [4. ELEM_SIZE​(int type)](#4. ELEM_SIZE(int type))
      • [5.isInteger​(int type)](#5.isInteger(int type))
      • [6. makeType​(int depth, int channels)](#6. makeType(int depth, int channels))
      • [7.typeToString​(int type)](#7.typeToString(int type))
  • 二、Scalar

上一节我们简单的了解了下数据类型,这里我们说下CvType类中的函数作用和Scalar对象

一、CvType

📢一个常量类,用于指定矩阵的数据类型和通道数。它提供了多种预定义的数据类型,例如 CV_8U(8位无符号整数)、CV_32F(32位浮点数)

1.数据类型

F 表示浮点数,S 表示有符号整数,U 表示无符号整数,C1...C4 表示单通道...四通道

2.方法介绍

示例已贴出,请自行验证

1.channels​(int type)

获取给定数据类型对应的通道数。

java 复制代码
        System.out.println("通道数= " + CvType.channels(CvType.CV_8SC4));

2.CV_8UC​(int ch)

给定一个通道数,创建换一个与之相应的数据类型,其它类似的函数作用是一样的,比如CV_16FC​(int ch)CV_32SC​(int ch)等方法。

java 复制代码
        Mat mat = new Mat(3,3,CvType.CV_8UC(3));

如示例所示,CvType.CV_8UC(3)等同于CvType.CV_8UC3

3.depth​(int type)

获取深度值,即获取对应的数据类型,返回一个int值。

java 复制代码
        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 字节。

java 复制代码
System.out.println("CvType.CV_8UC3 = " + CvType.ELEM_SIZE(CvType.CV_8UC3));

这里仅提供一个示例,请验证下其它数据类型的字节大小

5.isInteger​(int type)

判断数据类型是否为整数类型。

java 复制代码
 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)

根据指定的深度和通道数创建一个数据类型。

java 复制代码
 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对象

java 复制代码
 System.out.println("Scalar.all(10) = " + Scalar.all(10));

创建一个所有通道都是10的Scalar对象

2.clone()

创建并返回当前 Scalar 对象的一个副本。

3.conj()

返回一个共轭的Scalar对象。共轭在当前是指即具有相同信息(元素值)同时也具有与之对应信息(元素值)的两个对象。如下所示(示例仅用于演示,不考虑数据的合理性

java 复制代码
        Scalar scalar = new Scalar(1,2,3,4);
        Scalar conj = scalar.conj();
        System.out.println("scalar = " + scalar);
        System.out.println("conj = " + conj);

结果如下

bash 复制代码
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()

判断通道是否含有实数。这个函数有点特殊。我们查看源码

java 复制代码
    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对象的对应分量进行乘法运算

java 复制代码
        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的值

csharp 复制代码
        Scalar scalar = new Scalar(1,2,3,4);
        double [] vals = {2,3,4,5};
        scalar.set(vals);
相关推荐
a0023450011 分钟前
python类型转换&深浅拷贝
开发语言·python
2301_7665360531 分钟前
调试无痛入手
开发语言·前端
卓越软件开发32 分钟前
Java计算机毕业设计基于SSM宠物美容信息管理系统数据库源代码+LW文档+开题报告+答辩稿+部署教程+代码讲解
java·课程设计·宠物
丁总学Java33 分钟前
Cannot deserialize instance of java.lang.String out of START_ARRAY token
java·windows·python
+72035 分钟前
Java 的 HttpClient 中使用 POST 请求传递参数
java·开发语言
@大迁世界2 小时前
构建 Next.js 应用时的安全保障与风险防范措施
开发语言·前端·javascript·安全·ecmascript
lozhyf2 小时前
如何使用Spring boot框架实现图书管理系统
java·spring
WalkingWithTheWind~2 小时前
Linux搭建Nginx直播流媒体服务RTMP/RTSP转Http-flv视频浏览器在线播放/Vue/Java/ffmpeg
java·linux·nginx·ffmpeg·vue·http-flv·rtsp
FLZJ_KL2 小时前
【设计模式】【创建型模式】抽象工厂模式(Abstract Factory)
java·设计模式·抽象工厂模式