【C++的OpenCV】第十四课-OpenCV基础强化(三):Mat元素的访问之data和step属性
🎉🎉🎉 欢迎来到小白 p i a o 的学习空间! \color{red}{欢迎来到小白piao的学习空间!} 欢迎来到小白piao的学习空间!🎉🎉🎉
💖 C++\Python所有的入门技术皆在 我的主页 \color{#0cc123}{我的主页} 我的主页:我的主页
💖 我的资源: \color{purple}{我的资源:} 我的资源:我的资源
- IT技术各档次模板
- 各类项目(企业项目、毕设)
- 数据库安装包(Mysql8.0)
- 技能资料(电子书、软考等)
目录
- 前言 \color{purple}{前言} 前言
- 💖 一、利用成员变量 s t e p 和 d a t a 访问 M a t 中的元素 \color{blue}{一、利用成员变量step和data访问Mat中的元素} 一、利用成员变量step和data访问Mat中的元素
- 1.1 s t e p 和 d a t a 的概念 \color{green}{1.1 step和data的概念} 1.1step和data的概念
- 1.1.1 step
- 1.1.2 data
- 1.2 具体使用方法 \color{green}{1.2 具体使用方法} 1.2具体使用方法
- 1.2.1 图解教程
- 1.2.2 代码实例
- 1.3 小结 \color{green}{1.3 小结} 1.3小结
- 💖 二、总结 \color{red}{二、总结} 二、总结
前言 \color{purple}{前言} 前言
昨天由于有点写不动了,所以还剩了些内容放在今天完成,今天的内容完成常用Mat操作的元素访问环节的介绍,如果还没有看过前边内容的小伙伴,赶紧从前文开始学起来哦!
💖前文链接:【C++的OpenCV】第十四课-OpenCV基础强化(二):访问单通道Mat中的值
💖 一、利用成员变量 s t e p 和 d a t a 访问 M a t 中的元素 \color{blue}{一、利用成员变量step和data访问Mat中的元素} 一、利用成员变量step和data访问Mat中的元素
通过之前的学习内容我们知道,Mat中的元素在空间中存储的形式无非以下两种:
-
形式一:行元素连续,行与行之间有固定等大的间隔
-
形式二:所有元素连续存储
如果不知道为什么的小伙伴,请赶快点击上边的前文链接学习起来!【C++的OpenCV】第十四课-OpenCV基础强化(二):访问单通道Mat中的值
1.1 s t e p 和 d a t a 的概念 \color{green}{1.1 step和data的概念} 1.1step和data的概念
1.1.1 step
不难看出,首先step是一个MatStep类型的值,那MatStep又是什么呢?
在OpenCV中,MatStep是一个结构体,用于描述一个多维矩阵(Mat)的步幅(stride)。步幅是指在内存中从一个元素到下一个元素所需的字节数。
值得注意的是:
- step[0] 代表矩阵每一行所占的字节数,如果有间隔的话,这个间隔的字节数也算作在内!
- step[1] 代表每一个数值所占的字节数。
1.1.2 data
首先呢,它就是一个uchar类型的指针而已!其次呢,其实就是指向矩阵第一个值的指针。
1.2 具体使用方法 \color{green}{1.2 具体使用方法} 1.2具体使用方法
// 基于上述的描述:
// 访问一个元素可以如下:
*((int*)(m.data+m.step[0]*r+m.step[1]*c))// 其中:1.r代表行,c代表列,都是从0开始。2.m就是一个Mat对象,后续有完整代码展示,这里特此申明!
1.2.1 图解教程
重点来了,花点事件通过图解的形式理解一下上述的代码为什么可以找到每一个想要找到的元素:
假如说,我们需要访问下边矩阵中的元素4
首先,解析代码中的m.data: 指向首个元素的指针,即目前其位置如下:
接下来,我们来看 m.data+m.step[0]*r :
4 所在的位置的r值(r=1),如果是访问第一行元素则很简单了,r为0就没有 m.step[0]*r 这一项了。
m.step[0]*r此时就是第一行所有的字节数,包含间距,即如下图,蓝色方框框住的即为m.step[0]所占的字节空间:
所以上述的操作其实相当于是把m.data往后移动了“ m.step[0] * 1 ” 的字节数,此时,m.data就跨过了第一行的间隔,来到了第二行首个元素的位置。
(这里纠正一下,在上边一张描述m.data的位置的图片中,我将其指向了那个数字1,这种描述不够准确,特此纠正!应该是指向空间的头!)
最后就是这个“ m.step[1]*c ”了,首先step[1]还记得吗?代表“一个数值所占的字节数”,这里4处于的位置中c的值为1,
所以这里相当于给m.data加了一个元素的字节数(m.step[1] * 1),所以m.data发生了移动:
经过上述一系列的操作,终于搞懂了“(m.data+m.step[0]*r+m.step[1]*c)”的含义,至于外边的那个(int*)就不解释了(类型强制转换而已 )。
而这个玩意呢?不就是把强转之后的指针去解除引用找到对应位置的元素吗?那不就是4吗?下边是代码展示:
1.2.2 代码实例
#include<iostream>
#include"opencv2/core/utility.hpp"
using namespace std;
using namespace cv;int main()
{Mat m = (Mat_<int>(3,2) << 1,2,3,4,5,6);cout << m <<endl; // 注意:显示的是3行2列/*[1, 2;3, 4;5, 6]*/cout << *((int*)(m.data+m.step[0]*1+m.step[1]*1)) << endl;return 0;
}
1.3 小结 \color{green}{1.3 小结} 1.3小结
简短总结下访问Mat中元素的方法:
- 成员函数at() 前文链接
- 成员函数ptr() 前文链接
- isContinuous()和ptr()组合的方式 前文链接
- step和data组合方式
这是四种最常用的方法,希望大家可以熟练掌握,即使没有新的思路,那这几个基本可以解决开发中实际遇到的访问元素的情况(千万不要觉得难的方法就不用了,有些复杂环境下可能更加高效,总而言之,掌握多一点,对你没坏处)!
💖 二、总结 \color{red}{二、总结} 二、总结
这部分内容落下了(实际是写不动了),给大家补全,可以理解为是上一章节的补充章节!可以学习起来了。新章节的内容,我们另起一页重头说起!
💖💖💖 持续更新,期待关注! \color{blue}{持续更新,期待关注!} 持续更新,期待关注!💖💖💖
相关文章:

【C++的OpenCV】第十四课-OpenCV基础强化(三):Mat元素的访问之data和step属性
🎉🎉🎉 欢迎来到小白 p i a o 的学习空间! \color{red}{欢迎来到小白piao的学习空间!} 欢迎来到小白piao的学习空间!🎉🎉🎉 💖 C\Python所有的入门技术皆在 我…...

Springmvc 讲解(1)
文章目录 前言一、SpringMvc1、简介2、核心组件和调用流程2.1 涉及组件的理解 3、小案例快速体验3.1场景需求3.1.1 导入依赖3.1.2 controller声明3.1.3 核心配置类3.1.4 环境搭建3.1.6 配置tomcat3.1.7 测试 二、SpringMvc 接收参数1.路径设置注解2、param接收参数四种类型2.1 …...

超级英雄的导航之旅:动态路由和嵌套路由
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
发现个好玩的 Windows微信对话框换行
按住shift键按enter就是换行 直接按enter为发送...

Vue3最佳实践 第八章 ESLint 与 测试 ( Jest )
Jest 测试 Vue 组件 在前端项目开发过程中,有很多时候也会要进行测试工作。本文将重点介绍如何利用 JavaScript 测试框架 Jest 进行高效的测试。Jest 是由 FaceBook 开发的顶级测试框架之一,广受开发者们的欢迎和信赖。在接下来的内容中,我…...

【抓包分析】通过ChatGPT解密还原某软件登录算法实现绕过手机验证码登录
文章目录 🍋前言实现效果成品广告抓包分析一、定位加密文件二、编辑JS启用本地替换 利用Chatgpt进行代码转换获取计划任务id模拟数据请求最后 🍋前言 由于C站版权太多,所有的爬虫相关均为记录,不做深入! 今天发现gith…...

【UE】属性同步,源码详解一个勾选了Actor复制的Actor第一次被创建时经历了什么
本文参考https://zhuanlan.zhihu.com/p/640723352 准备工作 先准备一个勾选了复制的Actor,然后在游戏开始时Spawn这个Actor 源码过程详解 发送属性同步 在NetDriver的TickFlush中发送属性同步的数据 1、ServerReplicateActors_BuildConsiderList 去找到所有需…...

Spring中Bean的完整生命周期!(Bean实例化的流程,Spring后处理器,循环依赖解释及解决方法)附案例演示
Bean实例化的基本流程 加载xml配置文件,解析获取配置中的每个的信息,封装成一个个的BeanDefinition对象将BeanDefinition存储在一个名为beanDefinitionMap的Map<String,BeanDefinition>中ApplicationContext底层遍历beanDefinitionMap,…...

AcWing第 127 场周赛 - AcWing 5283. 牛棚入住+AcWing 5284. 构造矩阵 - 模拟+快速幂+数学
AcWing 5283. 牛棚入住 题目数据范围不大,直接暴力模拟即可 按照题目所说的意思即可。 #include <math.h> #include <stdio.h> #include <algorithm> #include <cstring> #include <iostream> using namespace std; const int N 1…...
2023-10-31 游戏开发-微信小游戏-文档记录
摘要: 2023-10-31 游戏开发-微信小游戏-文档记录 微信开发文档: 快速上手 | 微信开放文档 基础 | 微信开放文档 Cocos/Laya/Egret引擎适配 | 微信开放文档 cocos和微信平台相关文档: Cocos Creator 3.8 手册 - 发布到微信小游戏...
2023NOIP A层联测21-异或
给定一长度为 N N N 的由非负整数组成的数组 a a a,你需要进行一系列操作,每次操作选择一个区间 [ l , r ] [l,r] [l,r],将 a [ l , r ] a_{[l,r]} a[l,r] 异或上 w w w。你需要将 a i a_i ai 全部变为 0 0 0。 求最小操作次数。…...
分布式存储系统Ceph应用组件介绍
1、 无中心架构分布式存储Ceph Ceph是一套开源的分布式存储系统。具有可靠性高,性能优良,可伸缩,与HDFS不同的地方在于,该架构中没有中心节点。 Ceph优点在于它不单单是存储,同时还充分利用了存储节点上的计算能…...

【数据结构】数组和字符串(十一):字符串的定义与存储(顺序存储、链式存储及其C语言实现)
文章目录 4.3 字符串4.3.1 字符串的定义与存储1. 顺序存储2. 链式存储3. C语言实现顺序存储4. C语言实现链式存储代码优化 4.3 字符串 字符串(String)是由零个或多个字符(char)顺序排列组成的有限序列,简称为串。例如 “good morning”就是由12个字符构成的一个字符…...

zk-Bench:SNARKs性能对比评估工具
1. 引言 JENS ERNSTBERGER等人2023年论文《zk-Bench: A Toolset for Comparative Evaluation and Performance Benchmarking of SNARKs》。 zk-Bench,定位为: 定位为首个公钥密码学性能评估基准测试框架和工具,重点关注通用ZKP系统的实测评…...

【Linux】NTP服务器配置、时间修改
查看当前系统时间date修改当前系统时间date -s "2018-2-22 19:10:30"查看硬件时间hwclock --show修改硬件时间hwclock --set --date "2018-2-22 19:10:30"同步系统时间和硬件时间hwclock --hctosys保存时钟clock –w1.设置NTP Server服务检查系统是否安装n…...

毕业设计基于SpringMVC+Mybatis+Bootstrap的电影院管理系统源码+数据库
<<电影院管理系统>> 电影院管理系统:SpringMVCJSPTomcatMybatisBootstrapJqueryAnimateCSSLayerJS 项目部署:该项目是IDEA版本,Maven项目 前端依赖: Bootstrap-3.4.1Animate.css- 4.1.1Jquery-3.6.0Layer-v3.5.1B…...
vantUI(Tabbar标签页)浏览器返回上一页的失效问题
在开发中遇到这样一个问题,由页面1切换到页面2,再点击浏览器的回退,无法回退到页面1。 开始以为是路由配置的有问题,但是子页面可以正常回退,因为replace只是替换路由,而不会往history栈中记录路由&#x…...
【算法】Prim算法(求最小生成树)
题目 给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。 求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。 给定一张边带权的无向图 G(V,E),其中 V 表示图中点的集合,E…...
go语言,yaml实现简单的workflow工作流
目录 1.创建一个yaml文件,名字可以是student.yaml 2.创建go文件测试 3.执行结果 本文章内容,只是一个简单的案例,但足够映射到一个大的项目中。 工作流作用:工作流的作用就是通过yaml配置文件,将关于本工作流的一个…...
BaiduMallServcie
说明 本文档指导业务开发步骤 BaiduMallServcie 说明一. 登录业务1.1 数据库设计1.1.1 管理员表1.1.2 角色表1.1.3 关联表 管理员表与角色表关联1.1.4 权限表1.1.5 关联表 角色表与权限表关联1.1.6 管理员登录日志表1.1.7 查询权限示例1.2 添加用户一. 登录业务 1.1 数据库设…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...