单通道Mat元素的访问之data和step属性【C++的OpenCV 第十四课-OpenCV基础强化(三)】

news2024/10/7 20:36:45

🎉🎉🎉 欢迎来到小白 p i a o 的学习空间! \color{red}{欢迎来到小白piao的学习空间!} 欢迎来到小白piao的学习空间!🎉🎉🎉
💖 C++\Python所有的入门技术皆在 我的主页 \color{#0cc123}{我的主页} 我的主页:我的主页



💖 一、利用成员变量 s t e p 和 d a t a 访问 M a t 中的元素 \color{blue}{一、利用成员变量step和data访问Mat中的元素} 一、利用成员变量stepdata访问Mat中的元素

        通过之前的学习内容我们知道,Mat中的元素在空间中存储的形式无非以下两种:

  • 形式一:行元素连续,行与行之间有固定等大的间隔
    在这里插入图片描述

  • 形式二:所有元素连续存储
    在这里插入图片描述

        如果不知道为什么的小伙伴,请赶快点击上边的前文链接学习起来!【C++的OpenCV】第十四课-OpenCV基础强化(二):访问单通道Mat中的值

1.1 s t e p 和 d a t a 的概念 \color{green}{1.1 step和data的概念} 1.1stepdata的概念

1.1.1 step

在这里插入图片描述        不难看出,首先step是一个MatStep类型的值,那MatStep又是什么呢?

在这里插入图片描述        在OpenCV中,MatStep是一个结构体,用于描述一个多维矩阵(Mat)的步幅(stride)。步幅是指在内存中从一个元素到下一个元素所需的字节数

值得注意的是:

  1. step[0] 代表矩阵每一行所占的字节数,如果有间隔的话,这个间隔的字节数也算作在内!
  2. 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中元素的方法:

  1. 成员函数at() 前文链接
  2. 成员函数ptr() 前文链接
  3. isContinuous()和ptr()组合的方式 前文链接
  4. step和data组合方式

        这是四种最常用的方法,希望大家可以熟练掌握,即使没有新的思路,那这几个基本可以解决开发中实际遇到的访问元素的情况(千万不要觉得难的方法就不用了,有些复杂环境下可能更加高效,总而言之,掌握多一点,对你没坏处)!


💖 二、总结 \color{red}{二、总结} 二、总结

        这部分内容落下了(实际是写不动了),给大家补全,可以理解为是上一章节的补充章节!可以学习起来了。新章节的内容,我们另起一页重头说起!


💖💖💖 持续更新,期待关注! \color{blue}{持续更新,期待关注!} 持续更新,期待关注!💖💖💖

💖 我的资源: \color{purple}{我的资源:} 我的资源:我的资源

  1. IT技术各档次模板
  2. 各类项目(企业项目、毕设)
  3. 数据库安装包(Mysql8.0)
  4. 技能资料(电子书、软考等)

💖前文链接:【C++的OpenCV】第十四课-OpenCV基础强化(二):访问单通道Mat中的值—

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

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

相关文章

ArcGIS for Android 禁止地图旋转

ArcGIS for Android 禁止地图旋转 话不多说&#xff0c;直接上代码&#xff01;&#xff01;&#xff01; public class LoadMap extends AppCompatActivity {// 地图private MapView mapView;private ArcGISMap map;Overrideprotected void onCreate(Bundle savedInstanceSta…

ConnectionError: HTTPSConnectionPool

ConnectionError: HTTPSConnectionPool(host‘zbbfxstatic.figtingdream.com’, port443): Max retries exceeded with url: /api/cache (Caused by NewConnectionError(‘<urllib3.connection.HTTPSConnection object at 0x00000249795AD9A0>: Failed to establish a ne…

点焊机的数据校验

下班了&#xff0c;今天又来看看小编学习了什么内容先吧&#xff01;&#xff01;&#xff01;今天原本以为是摸鱼的一天&#xff0c;突然间传来了机器出现问题的消息&#xff01;机器比较老旧&#xff0c;怀疑填数据出现问题&#xff0c;就下达了机器原来数据进行校验的活&…

基于单片机的智能灭火小车设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、整体设计方案1.1 整体设计任务1.2 整体设计要求1.3 系统整体方案设计1.3.1 整体模块设计1.3.2 整体设计方案选择…

55个Java毕设项目推荐【源码好优多】

55个Java毕设项目推荐&#xff0c;实践出真知&#xff0c;现在要想知道自己的到底技术达不达标&#xff0c;项目就是检验的唯一标准。 下面是我整理准备的55个Java毕设项目合集&#xff1a; 1、网上订购管理系统 2、健康管理系统 3、项目辅导视频 4、医院在线挂号 5、在线花店…

什么是云安全?

关于云技术有一些模棱两可的术语&#xff0c;因此值得花一些时间来定义一些常见术语。当我们谈论“云”、“云服务”或“云计算”时&#xff0c;我们的意思是&#xff1a; “一种按需、大规模可扩展的服务&#xff0c;托管在共享基础设施上&#xff0c;可通过互联网访问。典型的…

【C语言】备战校赛Day2

日期:11.2 星期三 L1-004 计算摄氏温度 题目描述 给定一个华氏温度F&#xff0c;本题要求编写程序&#xff0c;计算对应的摄氏温度C。计算公式&#xff1a;C5(F−32)/9。题目保证输入与输出均在整型范围内。 输入描述 输入在一行中给出一个华氏温度。 输出描述 在一行中按照格…

C++构造函数和析构函数详解

一、构造函数 1、概念 构造函数是特殊的成员函数&#xff0c;需要注意的是&#xff0c;构造函数虽然名叫做构造&#xff0c;但是构造函数的主要任务并不是开空间创建对象&#xff0c;而是初始化对象。 2、特征 函数名与类名相同。无返回值对象实例化时编译器自动调用对应的…

探索Allure Report:提升自动化测试效率的秘密武器

一.使用 Allure2 运行方式-Python # --alluredir 参数生成测试报告。 # 在测试执行期间收集结果 pytest [测试用例/模块/包] --alluredir./result/ (—alluredir这个选项 用于指定存储测试结果的路径)# 生成在线的测试报告 allure serve ./result二.使用 Allure2 运行方式-Ja…

ChineseChess.2023.11.01.03

1 红【马三进四】吃黑车&#xff0c;红方没有将军&#xff0c;黑方进攻 黑方 【 卒4平5】&#xff0c; 将 红帅 红【炮五退七】吃黑【卒5】&#xff0c;解将&#xff0c;不用看&#xff0c;你没棋走 黑【炮4进7】&#xff0c;将红帅&#xff0c;绝杀&#xff0c;位置都被自己卡…

Android四大组件总结

从事安卓开发也有两年多的时间了&#xff0c;从头开始整理下所学的东西&#xff0c;坚持&#xff01;&#xff01;&#xff01; 一、Activity 活动 Activity 用于显示用户界面&#xff0c;用户通过 Activity 交互完成相关操作&#xff1b; 一个 App 允许有多个Activity Activi…

贝锐向日葵亮相阿里云“云栖大会”:独创专利算法赋能全新云桌面

2023年10月31日-11月2日&#xff0c;一年一度的云栖大会如期举办&#xff0c;国产远程连接服务创领者贝锐受邀参与。活动现场&#xff0c;贝锐CTO张小峰进行了分享&#xff0c;宣布贝锐旗下国民级远程控制品牌“贝锐向日葵”与无影展开合作&#xff0c;同时全新的“云桌面”将于…

1360. 日期之间隔几天

1360. 日期之间隔几天 Java代码&#xff1a; 【DateFormat】DateFormat用于实现日期的格式化 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; // 好像已过时class Solution {public int daysBet…

RHCE---shell脚本编程之awk

文章目录 目录 文章目录 前言 一.awk概念 二.工作流程 三.awk执行方式 四.awk 语法结构及案例 纯命令执行脚本 awk命令调用脚本执行 直接awk纯脚本执行 五.记录和域 概念&#xff1a; 六.awk的变量 总结 前言 前文已详细了介绍了文本三剑客的其中两种grep 和 sed 命…

C++查看Class类结构

cl指令 cl test.cpp /d1reportSingleClassLayout 类名 注意。上面指令是d1,1是数字1 &#xff0c; 不是字母l;

深度解析concrt140.dll丢失的5个解决方法,快速搞定dll问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“concrt140.dll丢失”。这个问题通常会导致某些应用程序无法正常运行&#xff0c;给用户带来困扰。本文将介绍一种有效的解决方法&#xff0c;帮助用户解决concrt140.dll丢失的问题。 一、原…

时序分解 | Matlab实现NGO-VMD北方苍鹰算法优化变分模态分解时间序列信号分解

时序分解 | Matlab实现NGO-VMD北方苍鹰算法优化变分模态分解时间序列信号分解 目录 时序分解 | Matlab实现NGO-VMD北方苍鹰算法优化变分模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 北方苍鹰算法NGO优化VMD&#xff0c;对其分解层数&#xff…

【Algorithm】最容易理解的蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)算法

看了不少解读和笔记&#xff0c;本文把最容易理解的解读做个总结。 1. 蒙特卡洛方法 蒙特卡洛方法(Monte Carlo method)&#xff0c;是一种“统计模拟方法”。20世纪40年代&#xff0c;为建造核武器&#xff0c;冯.诺伊曼 等人发明了该算法。因赌城蒙特卡洛而得名&#xff0c…

【HSPICE仿真】输入网表文件(6)用户自定义分析输出(.measure)

.measure语句的基本用法 1. 语句顺序2. 测量参数类型3. Rise, Fall, Delay, and Power Measurements4. FIND 和 WHEN 函数5. Equation Evaluation/Arithmetic Expression6. AVG, EM_AVG, INTEG, MIN, MAX, PP, and RMS基本语法示例 7. 输出文件格式MEASFORMMEASOUTMEASFILEMEAS…

程序员想要网上接单却看花了眼?那这几个平台你可得收藏好了!

现在经济压力这么大&#xff0c;但是生活成本还在上升&#xff0c;相信大家都知道“四脚吞金兽”的威力了吧&#xff01;话虽如此&#xff0c;但是生活总得继续&#xff0c;为了家庭的和谐幸福&#xff0c;为了孩子的未来&#xff0c;不少人选择多干几份工作&#xff0c;赚点外…