0
点赞
收藏
分享

微信扫一扫

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

梯梯笔记 04-03 22:00 阅读 2
专栏简介

💒个人主页
📰专栏目录

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

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


🧭文章导航🧭
⬆️ 2.hello openCV
⬇️ 4.待更新

数据类型(CvType)与Scalar


   上一节我们简单的了解了下数据类型,这里我们说下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);

结果

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);
举报

相关推荐

0 条评论