学习OpenCV——CV_8UC1、CV_16UC1、CV_32FC1等对应的整数值及计算方法(一)

学习OpenCV——CV_8UC1、CV_16UC1、CV_32FC1等对应的整数值及计算方法(一)

  • 1.代码段
  • 2.计算方法举例
  • 3.直接给出其余对应结果

1.代码段

以下取自OpenCV文档

#define 	CV_BIG_INT(n)   
#define 	CV_BIG_UINT(n)   
#define 	CV_CN_MAX   512
#define 	CV_CN_SHIFT   3
#define 	CV_DEPTH_MAX   (1 << CV_CN_SHIFT)
#define 	CV_8U   0
#define 	CV_8S   1
#define 	CV_16U   2
#define 	CV_16S   3
#define 	CV_32S   4
#define 	CV_32F   5
#define 	CV_64F   6
#define 	CV_USRTYPE1   7
#define 	CV_MAT_DEPTH_MASK   (CV_DEPTH_MAX - 1)
#define 	CV_MAT_DEPTH(flags)   ((flags) & CV_MAT_DEPTH_MASK)
#define 	CV_MAKETYPE(depth, cn)   (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT))
#define 	CV_MAKE_TYPE   CV_MAKETYPE
#define 	CV_8UC1   CV_MAKETYPE(CV_8U,1)
#define 	CV_8UC2   CV_MAKETYPE(CV_8U,2)
#define 	CV_8UC3   CV_MAKETYPE(CV_8U,3)
#define 	CV_8UC4   CV_MAKETYPE(CV_8U,4)
#define 	CV_8UC(n)   CV_MAKETYPE(CV_8U,(n))
#define 	CV_8SC1   CV_MAKETYPE(CV_8S,1)
#define 	CV_8SC2   CV_MAKETYPE(CV_8S,2)
#define 	CV_8SC3   CV_MAKETYPE(CV_8S,3)
#define 	CV_8SC4   CV_MAKETYPE(CV_8S,4)
#define 	CV_8SC(n)   CV_MAKETYPE(CV_8S,(n))
#define 	CV_16UC1   CV_MAKETYPE(CV_16U,1)
#define 	CV_16UC2   CV_MAKETYPE(CV_16U,2)
#define 	CV_16UC3   CV_MAKETYPE(CV_16U,3)
#define 	CV_16UC4   CV_MAKETYPE(CV_16U,4)
#define 	CV_16UC(n)   CV_MAKETYPE(CV_16U,(n))
#define 	CV_16SC1   CV_MAKETYPE(CV_16S,1)
#define 	CV_16SC2   CV_MAKETYPE(CV_16S,2)
#define 	CV_16SC3   CV_MAKETYPE(CV_16S,3)
#define 	CV_16SC4   CV_MAKETYPE(CV_16S,4)
#define 	CV_16SC(n)   CV_MAKETYPE(CV_16S,(n))
#define 	CV_32SC1   CV_MAKETYPE(CV_32S,1)
#define 	CV_32SC2   CV_MAKETYPE(CV_32S,2)
#define 	CV_32SC3   CV_MAKETYPE(CV_32S,3)
#define 	CV_32SC4   CV_MAKETYPE(CV_32S,4)
#define 	CV_32SC(n)   CV_MAKETYPE(CV_32S,(n))
#define 	CV_32FC1   CV_MAKETYPE(CV_32F,1)
#define 	CV_32FC2   CV_MAKETYPE(CV_32F,2)
#define 	CV_32FC3   CV_MAKETYPE(CV_32F,3)
#define 	CV_32FC4   CV_MAKETYPE(CV_32F,4)
#define 	CV_32FC(n)   CV_MAKETYPE(CV_32F,(n))
#define 	CV_64FC1   CV_MAKETYPE(CV_64F,1)
#define 	CV_64FC2   CV_MAKETYPE(CV_64F,2)
#define 	CV_64FC3   CV_MAKETYPE(CV_64F,3)
#define 	CV_64FC4   CV_MAKETYPE(CV_64F,4)
#define 	CV_64FC(n)   CV_MAKETYPE(CV_64F,(n))

2.计算方法举例

根据提供的宏定义,CV_8UC1 是通过 CV_MAKETYPE 宏定义的一个数据类型标识符,它结合了数据深度 CV_8U 和通道数 1。

1)首先,需要知道 CV_8U 和 CV_CN_SHIFT 的值。
根据代码:
CV_8U 表示8位无符号整数,对应的整数值是 0。
CV_CN_SHIFT 表示通道数的位移量,其值是 3。

2)CV_MAT_DEPTH_MASK 是用来获取数据深度的掩码,它定义为 (1 << CV_CN_SHIFT) - 1。
根据 CV_CN_SHIFT 的值,CV_MAT_DEPTH_MASK 计算如下:
1 << CV_CN_SHIFT = 1 << 3 = 8
(1 << CV_CN_SHIFT) - 1 = 8 - 1 = 7
所以,CV_MAT_DEPTH_MASK 的值是 7。

3)使用 CV_MAKETYPE 宏来计算 CV_8UC1 的整数值:

CV_MAKETYPE(CV_8U, 1) = (CV_MAT_DEPTH(CV_8U) + ((1 - 1) << CV_CN_SHIFT))
由于 CV_8U 对应的整数值是 0,并且 1 - 1 等于 0,
所以:
CV_MAKETYPE(0, 0) = (0 + (0 << 3))
左移操作 0 << 3 的结果仍然是 0,因为任何数左移0位都保持不变。
所以:
CV_MAKETYPE(0, 0) = 0 + 0 = 0
因此,CV_8UC1 对应的整数值是 0。这意味着它表示一个8位单通道图像,其中单通道(灰度图像)的数据类型是无符号整数。

说明:
根据提供的代码,CV_MAKETYPE(depth, cn) 宏的定义如下:
#define CV_MAKETYPE(depth, cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT))
其中,CV_MAT_DEPTH(depth) 是一个提取数据类型深度的宏,而 ((cn)-1) << CV_CN_SHIFT) 计算的是通道数部分的值。

根据之前的讨论,我们知道:

CV_CN_SHIFT 是通道数在数据类型标识符中左移的位数。
CV_MAT_DEPTH(depth) 是数据类型深度的掩码,它是 CV_DEPTH_MAX - 1,而 CV_DEPTH_MAX 是 (1 << CV_CN_SHIFT)。
假设 CV_CN_SHIFT 的值为 3,那么 CV_MAT_DEPTH_MASK 将会是 1 << CV_CN_SHIFT - 1,即 7。这意味着数据类型深度占据了标识符的低3位,而通道数占据了接下来的几位。

现在,再让我们计算一些具体的例子:

CV_8UC1:8位无符号整数,单通道。

深度:CV_8U 对应的整数值(假设为 0)。
通道数:1 - 1 左移 CV_CN_SHIFT 位,即 0 左移 3 位,结果还是 0。
结果:0 + 0 = 0
CV_8UC2:8位无符号整数,双通道。

深度:CV_8U 对应的整数值(假设为 0)。
通道数:(2 - 1) << 3 = 1 << 3 = 8。
结果:0 + 8 = 8
CV_8UC3:8位无符号整数,三通道。

深度:CV_8U 对应的整数值(假设为 0)。
通道数:(3 - 1) << 3 = 2 << 3 = 16。
结果:0 + 16 = 16
以此类推,对于 CV_8UC(n),其整数值计算为:

结果:CV_8U 的值 + (n - 1) << CV_CN_SHIFT

3.直接给出其余对应结果

对于无符号16位整数类型(CV_16U):
CV_16UC1 = CV_16U + ((1-1) << CV_CN_SHIFT) = 2 + (0 << 3) = 2
CV_16UC2 = CV_16U + ((2-1) << CV_CN_SHIFT) = 2 + (1 << 3) = 2 + 8 = 10
CV_16UC3 = CV_16U + ((3-1) << CV_CN_SHIFT) = 2 + (2 << 3) = 2 + 16 = 18
CV_16UC4 = CV_16U + ((4-1) << CV_CN_SHIFT) = 2 + (3 << 3) = 2 + 24 = 26
CV_16UC(n) 是一个通用宏,对于任意 n,其计算方式为 2 + ((n-1) << 3)
对于有符号16位整数类型(CV_16S):
CV_16SC1 = CV_16S + ((1-1) << CV_CN_SHIFT) = 3 + (0 << 3) = 3
CV_16SC2 = CV_16S + ((2-1) << CV_CN_SHIFT) = 3 + (1 << 3) = 3 + 8 = 11
CV_16SC3 = CV_16S + ((3-1) << CV_CN_SHIFT) = 3 + (2 << 3) = 3 + 16 = 19
CV_16SC4 = CV_16S + ((4-1) << CV_CN_SHIFT) = 3 + (3 << 3) = 3 + 24 = 27
CV_16SC(n) 对于任意 n,其计算方式为 3 + ((n-1) << 3)
对于32位有符号整数类型(CV_32S):
CV_32SC1 = CV_32S + ((1-1) << CV_CN_SHIFT) = 4 + (0 << 3) = 4
CV_32SC2 = CV_32S + ((2-1) << CV_CN_SHIFT) = 4 + (1 << 3) = 4 + 8 = 12
CV_32SC3 = CV_32S + ((3-1) << CV_CN_SHIFT) = 4 + (2 << 3) = 4 + 16 = 20
CV_32SC4 = CV_32S + ((4-1) << CV_CN_SHIFT) = 4 + (3 << 3) = 4 + 24 = 28
CV_32SC(n) 对于任意 n,其计算方式为 4 + ((n-1) << 3)
对于32位浮点数类型(CV_32F):
CV_32FC1 = CV_32F + ((1-1) << CV_CN_SHIFT) = 5 + (0 << 3) = 5
CV_32FC2 = CV_32F + ((2-1) << CV_CN_SHIFT) = 5 + (1 << 3) = 5 + 8 = 13
CV_32FC3 = CV_32F + ((3-1) << CV_CN_SHIFT) = 5 + (2 << 3) = 5 + 16 = 21
CV_32FC4 = CV_32F + ((4-1) << CV_CN_SHIFT) = 5 + (3 << 3) = 5 + 24 = 29
CV_32FC(n) 对于任意 n,其计算方式为 5 + ((n-1) << 3)
对于64位浮点数类型(CV_64F):
CV_64FC1 = CV_64F + ((1-1) << CV_CN_SHIFT) = 6 + (0 << 3) = 6
CV_64FC2 = CV_64F + ((2-1) << CV_CN_SHIFT) = 6 + (1 << 3) = 6 + 8 = 14
CV_64FC3 = CV_64F + ((3-1) << CV_CN_SHIFT) = 6 + (2 << 3) = 6 + 16 = 22
CV_64FC4 = CV_64F + ((4-1) << CV_CN_SHIFT) = 6 + (3 << 3) = 6 + 24 = 30
CV_64FC(n) 对于任意 n,其计算方式为 6 + ((n-1) << 3)

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

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

相关文章

等保合规:保护企业网络安全的必要性与优势

前言 无论是多部网络安全法律法规的出台&#xff0c;还是最近的“滴滴被安全审查”事件&#xff0c;我们听得最多的一个词&#xff0c;就是“等保。” 只要你接触安全类工作&#xff0c;听得最多的一个词&#xff0c;一定是“等保。” 那么&#xff0c;到底什么是“等保”呢…

Redis网络相关的结构体 和 reactor模式

目录 1. epoll的封装 结构体aeApiStae 创建epoll fd的封装 epoll_ctl的封装 epoll_wait的封装 2. 结构体aeFileEvent、aeFiredEvent、aeTimeEvent 结构体aeFileEvent 结构体aeFiredEvent 结构体aeTimeEvent 3. struct aeEventLoop aeEventLoop相关的函数 1. 创建eve…

Rust HTTP 客户端:易于使用、功能强大 | 开源日报 No.228

seanmonstar/reqwest Stars: 8.9k License: Apache-2.0 reqwest 是一个易于使用且功能强大的 Rust HTTP 客户端。 异步和阻塞客户端支持普通数据、JSON、urlencoded 和 multipart 数据格式可定制的重定向策略支持 HTTP 代理和系统原生 TLS 或 rustls 的 HTTPSCookie 存储功能…

JVM学习笔记(五)内存模型

目录 1、原子性 1.1 问题分析 1.2 解决方法 2、可见性 2.1 退不出的循环 2.2 解决办法 3、有序性 3.1 诡异的结果 3.2 解决办法 3.3 有序性理解 3.4 happens-before 4、CAS与原子类 4.1 CAS 4.2 乐观锁与悲观锁 4.3 原子操作类 5、synchronized 优化 5.1 轻量…

17(第十六章,数据管理组织与角色期望)

目录 概述 基本概念 首席数据官 个人角色 执行官角色 业务角色 IT角色 混合角色 组织架构模式 概述 本章书上的重点内容其实不多&#xff0c;了解的地方例如数据管理组织的结构包括分散、网络、混合、联邦、集中等运营模式。 之前也提过的RACI&#xff08;谁负责&am…

【域适应十九】CDTRANS: CROSS-DOMAIN TRANSFORMER FOR UN-SUPERVISED DOMAIN ADAPTATION

motivation 无监督域自适应旨在将学习到的知识从一个有标记的源领域转移到另一个无标记的目标领域。大多数现有的UDA方法都是使用基于卷积神经网络(cnn)的框架,从领域层面或类别层面学习域不变特征表示。基于类别级别的UDA的一个基本问题是为目标域中的样本产生伪标签,这些伪…

AWTK MODBUS Client channel 模型

名称&#xff1a;modbus_client_channel 功能&#xff1a;通过 modbus 协议访问远程 slave 设备上的数据&#xff0c;需要配合 modbus_client模型一起使用。用于将 modbus client 中的 channel 包装成view_model或者view_model_array 一般来说不需要&#xff0c;直接使用modbus…

MySQL怎么提升主从复制性能

在MySQL主从复制结构中&#xff0c;随着连接至数据源的副本数增加&#xff0c;尽管负载相对较小&#xff0c;但仍会增加负载&#xff0c;因为每个副本都要和数据源建立一个客户端连接。此外&#xff0c;由于每个副本都必须接收到源二进制日志的完整副本&#xff0c;源上的网络负…

CentOS 系统的优缺点

CentOS &#xff08;社区企业操作系统的缩写&#xff09;是一个基于红帽企业 Linux (RHEL)的免费开源发行版&#xff0c; 旨在为服务器和工作站提供稳定、可靠和安全的平台。 不应将其与CentOS Stream 混淆&#xff0c;后者是即将发布的 RHEL 版本的上游开发平台。 CentOS Li…

C++初阶之入门

零、什么是C C是基于C语言而产生的&#xff0c;它既可以进行C语言的过程化程序设计&#xff0c;又可以进行以抽象数据类型为特点的基于对象的程序设计&#xff0c;还可以进行面向对象的程序设计。 C缺点之一&#xff0c;是相对许多语言复杂&#xff0c;而且难学难精。许多人说学…

一般神经网络的微分与网络参数的初始化

(文章的主要内容来自电科的顾亦奇老师的 Mathematical Foundation of Deep Learning, 有部分个人理解) 一般深度神经网络的微分 上周讨论的前向和反向传播算法可以推广到任意深度神经网络的微分。 对于一般的网络来说&#xff0c;可能无法逐层分割&#xff0c;但仍然可以用流…

抖音小店运营过程中,每天必须要做的7件事情!少一件都不行!

大家好&#xff0c;我是电商小V 最近很多新手小伙伴刚做店&#xff0c;操作抖音小店每天需要做的事情都是哪些呢&#xff1f;感觉自己一天很忙&#xff0c;但是也没有忙出来结果&#xff0c;思绪很乱&#xff0c;关于这个问题咱们今天就来详细的说一下&#xff0c;给你们梳理总…

02 贪吃蛇

前言 呵呵 这是不知道 在哪里看到的 别人做的一个贪吃蛇 因此 也把我 之前的 贪吃蛇 移植上来了 当然 这个不过是为了 简单的入门了解, 呵呵 然后 c版本的贪吃蛇 需要先移植成 c 版本, 然后 再根据 单片机相关 设计调整 比如 led 点阵的输出, 比如 c99 语法的一些不兼容…

12 c++版本的坦克大战

前言 呵呵 这大概是 大学里面的 c 贪吃蛇了吧 有一些 面向对象的理解, 但是不多 这里 具体的实现 就不赘述, 仅仅是 发一下代码 以及 具体的使用 坦克大战 #include<iostream> #include<windows.h> #include<conio.h> #include<ctime> #include…

Python编程的终极十大工具

Python一直以来都是程序员们的首选编程语言之一&#xff0c;其灵活性和功能强大的库使其成为解决各种问题的理想选择。在本文中&#xff0c;我们将介绍Python编程的终极十大工具&#xff0c;这些工具可以帮助您在各种领域取得成功&#xff0c;无论您是初学者还是经验丰富的开发…

面试(四)

目录 1. 组长安排了一个不可能完成的任务&#xff0c;怎么拒绝&#xff1f; 2.讲一下Freertos的机器人 3. Freertos的中断 4. Freertos功能 5. 树莓派怎么识别二维码&#xff1f; 6. Linux脚本作用&#xff1f; 7. Modbus&#xff1f; 8. freertos的动态创建和静态创建…

【C++】C++的内存管理

目录 内存分布 动态内存管理 C语言的动态内存管理 C的动态内存管理 对内置类型操作 对自定义类型操作 new[]和delete[] 开空间的细节 探讨匹配问题 定位new表达式 内存分布 栈&#xff1a;存放非静态局部变量&#xff0c;函数参数&#xff0c;返回值等。栈是向下增长…

【数字电路与系统】【北京航空航天大学】实验:时序逻辑设计——三色灯开关(五)、小结

本次实验&#xff08;一&#xff09;见博客&#xff1a;【数字电路与系统】【北京航空航天大学】实验&#xff1a;时序逻辑设计——三色灯开关&#xff08;一&#xff09;、实验指导书 本次实验&#xff08;二&#xff09;见博客&#xff1a;【数字电路与系统】【北京航空航天…

大语言模型——涌现能力

在现有文献中,大语言模型的涌现能力被非形式化定义为在小型模型中不存在但在大模型中出现的能力”,具体是指当模型扩展到一定规模时,模型的特定任务性能突然出现显著跃升的趋势,远超过随机水平。类比而言,这种性能涌现模式与物理学中的相变现象有一定程度的相似,但是仍然…

如何在Android应用中安全地使用SQLite数据库,并通过SQLCipher进行加密保护

Android内置SQLite轻量级关系型数据库,可以在Android应用中存储、检索和管理结构化数据。SQLite是一个无服务器的、零配置的、事务性的SQL数据库引擎,非常适合用于移动设备和桌面应用程序中。 SQLite特点: 「轻量级」:SQLite不需要单独的服务器进程或操作系统级别的配置。…