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

news/2024/5/1 9:08:11
专栏简介

💒个人主页
📰专栏目录

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

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


🧭文章导航🧭
⬆️ 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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/11481.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【浅谈面向过程和面向对象的区别】

面向对象和面向过程是两种不同的编程范式,它们在处理问题和构建软件时有着显著的区别。 一、面向过程 1、基本概念 面向过程编程是一种早期的程序设计范型,它以事件为中心,主要关注“怎么做”,即完成任务的具体步骤。它将问题分…

centos7 安装 postgresql

进入地址:https://yum.postgresql.org/repopackages.php 鼠标放置红色框内,右击拷贝地址 yum install 拷贝的地址 例如:yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch…

大型矿业集团安全知识竞赛主持词

男:尊敬的各位领导,员工同志们: 合:大家好! 男;首先让我们以热烈的掌声对公司领导亲临比赛现场指导观看表示欢迎! 男;继成功开展了荣辱观专题讲座、好矿嫂女红艺术展、安全谜语竞猜…

CSS使用clip-path实现元素动画

前言: 在日常开发当中,如果想要开发多边形,一般都需要多个盒子或者伪元素的帮助,有没有一直办法能只使用一个盒子实现呢? 有的:css裁剪 目录 前言: clip-path到底是什么? clip-pa…

基于8086贪吃蛇游戏系统方恨设计

**单片机设计介绍,基于8086贪吃蛇游戏系统方恨设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于8086的贪吃蛇游戏系统设计是一个结合了微处理器控制、游戏逻辑以及图形显示技术的综合性项目。该系统旨在通过8086微处理器…

MATLAB 自定义中值滤波(54)

MATLAB 自定义中值滤波(54) 一、算法介绍二、算法实现1.原理2.代码一、算法介绍 中值滤波,是一种常见的点云平滑算法,改善原始点云的数据质量问题,MATLAB自带的工具似乎不太友好,这里提供自定义实现的点云中值滤波算法,具体效果如下所示: 中值滤波前: 中值滤波后:…