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

news/2024/6/15 16:20:24/文章来源:https://blog.csdn.net/qq_27185879/article/details/137148749
专栏简介

💒个人主页
📰专栏目录

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

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


🧭文章导航🧭
⬆️ 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.luyixian.cn/news_show_1035334.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leaflet使用多面(MultiPolygon)进行遥感影像掩膜报错解决之道

目录 前言 一、问题初诊断 1、山重水复 2、柳暗花明 3、庖丁解牛 4、问题定位 二、解决多面掩膜问题 1、尝试数据修复 2、实际修复 3、最终效果 三、总结 前言 之前一篇讲解遥感影像掩膜实现:基于SpringBoot和Leaflet的行政区划地图掩膜效果实战&#xff0…

Shell脚本介绍及基本功能

目录 一、什么是Shell 二、什么是Shell脚本 三、echo 四、Hello World 五、Bash的基本功能 1.别名 2.常用快捷键 3.输入输出 4.输出重定向 5.多命令执行 6.管道符 7.通配符和特殊符合 一、什么是Shell Shell是一种命令行解释器,它是操作系统的一部分&a…

MySQL进阶-----SQL提示与覆盖索引

目录 前言 一、SQL提示 1.数据准备 2. SQL的自我选择 3.SQL提示 二、覆盖索引 前言 MySQL进阶篇的索引部分基本上要结束了,这里就剩下SQL提示、覆盖索引、前缀索引以及单例联合索引的内容。那本期的话我们就先讲解SQL提示和覆盖索引先,剩下的内容就…

nvme协议学习总结

一、nvme命令 1 nvme在pcie基础上的协议,与PCIE配合,实现高效传输。 2 nvme命令主要分IO命令和admin命令。 3 一个NVME CMD执行流程: step1:host把cmd写入SQ queue中; step2:host远端更新Device&#x…

【微服务】OpenFeign+Sentinel集中处理远程调用异常

文章目录 1.微服务基本环境调整1.对10004模块的application.yml调整2.启动nacos以及一个消费者两个提供者3.测试1.输入http://localhost:8848/nacos/index.html 来查看注册情况2.浏览器访问 http://localhost:81/member/nacos/consumer/get/13.结果 2.使用OpenFeign实现微服务模…

什么是nginx正向代理和反向代理?

什么是代理? 代理(Proxy), 简单理解就是自己做不了的事情或实现不了的功能,委托别人去做。 什么是正向代理? 在nginx中,正向代理指委托者是客户端,即被代理的对象是客户端 在这幅图中,由于左边内网中…

6.Python容器类型的数据

若我们想将多个数据打包并且统一管理,应该怎么办? Python内置的数据类型如序列(列表、元组等)、集合和字典等可 以容纳多项数据,我们称它们为容器类型的数据 1 序列 序列(sequence)是一种可迭…

MYSQL-6.日志

日志 undo-log回滚日志: 存储:InnoDB默认将undo-log日志存储在xx.ibdata共享表数据文件中(Mysql5.5版本后支持单独存放),采用段形式存储;在xx.ibdata共享表数据文件中,有一块名为Rollback segm…

hcip综合实验2

目录 实验拓扑: 实验要求: 实验思路: 实验步骤: 1.配置设备接口IP 2.通过配置缺省路由让公网互通 3.配置ppp 1.R1和R5间的ppp的PAP认证; 2.R2与R5之间的ppp的CHAP认证; 3. R3与R5之间的HDLC封装; 4.构建R1、…

设计模式——结构型——外观模式Facade

处理器类 public class Cpu {public void start() {System.out.println("处理器启动了...");} } 内存类 public class Memory {public void start() {System.out.println("内存启动了...");} } 硬盘类 public class Disk {public void start() {Syste…

Linux部分命令

目录 1.文件介绍 2.ls命令 3.目录命令 4.相对路径以及绝对路径 5.命令创建目录(文件夹) 6.which命令 7.find命令 8.grep命令 9.wc命令 10.echo、tail、重定向符 1.文件介绍 和window不同,Linux没有盘路径,所有的文件都存…

《吴恩达:AI 智能体工作流引领人工智能新趋势》

近期值得看的 AI 视频之一:《吴恩达:AI 智能体工作流引领人工智能新趋势》这是吴恩达老师分享的他在 AI 智能体方面的发现。如果说智人区分于其他物种的能力是我们善用工具,那么对于 AI 来说,智能体就是它的工具。根据吴老师分享的…

全面的Docker快速入门教程(详细)

前言: 都2024年了,你还在为了安装一个开发或者部署环境、软件而花费半天的时间吗?你还在解决开发环境能够正常访问,而发布测试环境无法正常访问的问题吗?你还在为持续集成和持续交付(CI / CD)工…

uniapp中安装vant2

1.uniapp项目搭建 因为是安装vant2所以项目选择vue2,如果vue3项目的话安装vant3,vue3可能不适合这样安装方式 2.安装vant npm i vantlatest-v2 3.在main.js文件引入挂载vant 说明:// #ifndef VUE3这里是vue2模板用来挂载注册组件的地方&a…

pmp如何更好运用在实际工作中?

无论是刚步入职场的新人,还是具有多年工作经验的老手,都会有一种感慨:我曾认真学习了PMBOK项目管理知识,也取得了PMP证书,但如何将PMP中的科学项目管理理论和方法灵活运用到自己的工作中呢? 接下来&#x…

「51媒体网」邀请媒体采访报道对企业宣传有何意义?

传媒如春雨,润物细无声的,大家好,我是51媒体网胡老师。 邀请媒体采访报道对企业宣传具有多重意义: 提升品牌知名度和曝光度:媒体是信息传播的重要渠道,通过媒体的报道,企业及其活动、产品能够迅…

Xcode删除原本的Git,再添加新的git

本文参考:Xcode怎么删除原本git,在重新设置新的git地址_ios xcode 删除原本git-CSDN博客 开发中会有一个问题。Xcode项目A 提交到Git服务器server1,此时项目A内部已经存在一个Git文件,与server1相关联。 此时你想将项目A提交到 另一个Git…

说说你对数据结构-树的理解

对树 - 二叉搜索树的理解 二叉搜索树是一种常见的二叉树结构,它具有以下特点: 每个节点最多只有两个子节点,分别称为左子节点和右子节点;对于任意节点,其左子树中的所有节点均小于该节点,其右子树中的所有…

BFS专题

1、BFS解决FloodFill算法 1、1图像渲染 733. 图像渲染 - 力扣(LeetCode) class Solution {typedef pair<int,int> PII;int dx[4] = {0,0,1,-1};int dy[4] = {1,-1,0,0}; public:vector<vector<int>> floodFill(vector<vector<int>>& i…

适用于智能断路器、新能源汽车充电枪锁、电动玩具、电磁门锁等的直流电机驱动芯片D6289ADA介绍

应用领域 适用于智能断路器&#xff08;家用或工业智能空开&#xff09;、新能源汽车充电枪锁、电动玩具、电磁门锁、自动阀门等的直流电机驱动。 功能介绍 D6289ADA是一款直流马达驱动芯片&#xff0c;它有两个逻辑输入端子用来控制电机前进、后退及制动。该电路具有良好的抗干…