当前位置: 首页 > news >正文

【C++的OpenCV】第四课-OpenCV图像常用操作(一):Mat对象深化学习、灰度、ROI

我们开始图像处理的基本操作的了解

  • 一、图像对象本身的加深学习
    • 1.1 Mat对象和ROI
      • 1.1.1 创建一个明确的Mat对象
      • 1.1.2 感兴趣的区域ROI
  • 二、图像的灰度处理
    • 2.1 概念
    • 2.2 cvtColor()函数
    • 2.3 示例

一、图像对象本身的加深学习

1.1 Mat对象和ROI

    这是一个技术经验的浅尝,所以不是某个具体的函数,而是对前边某部分大家接触过的内容的加深和复习,帮助大家更深地进入视觉处理这个领域的学习。

1.1.1 创建一个明确的Mat对象

  • Mat对象的加深理解

    我们有多种方式从现实世界中获取数字图像:数码相机,扫描仪,计算机断层扫描和磁共振成像等等。在任何情况下,我们(人类)看到的都是图像。然而,当将其转换为数字设备时,我们记录的是图像中每个点的数值。

在这里插入图片描述
    例如在上述图像中,您可以看到汽车的镜像只不过是一个包含像素点所有强度值的矩阵。我们如何获取和存储像素值可能会根据我们的需要而有所不同,但最终,计算机世界内的所有图像可能会被减少到描述矩阵本身的数字矩阵和其他信息。OpenCV是一个计算机视觉库,其主要重点是处理和操纵这些信息。因此,您需要熟悉的第一件事是OpenCV如何存储和处理图像。
    所以可以简单的理解为,图像就是一个n维矩阵

  • Mat对象的构造函数的解读
    原文:Mat对象的多种构造函数原文地址

在这里插入图片描述
其中,我们常用的构造函数,主要有以下几种:
1、Mat (int rows, int cols, int type, const Scalar &s)

  • 参数解释:
//This is an overloaded member function, 
//provided for convenience. 
//It differs from the above function only in what argument(s) it accepts.
// 这是一个为了更加便捷而提供的重载成员函数,
//和上述构造函数的区别仅仅在于所接受的参数个数的不同//Parameters  成员参数:
//rows:	一个2维数组的行数
//cols:	 一个2维数组的列数
//type:	这是一个重要的参数,关于这个参数的值(宏),解释放在下边,大家一定要引起重视://原文:Array type. Use CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices,// or CV_8UC(n), ..., CV_64FC(n) to create multi-channel (up to CV_CN_MAX channels) matrices.//翻译:该参数表示数组的类型(矩阵的类型),//由CV_8UC1...CV_64FC4来创建1~4通道的矩阵,//或者使用CV_8UC(n), ..., CV_64FC(n)来创建多通道的矩阵。/*CV_[The number of bits per item][Signed or Unsigned][Type Prefix]C[The channel number]其中,The number of bits per item为每个矩阵数字的位数(实则规定十进制数字的大小,这里需要大家对二进制转换10进制比较了解才可);Signed or Unsigned为是否有符号(数据的类型);The channel number为通道的个数Type Prefix为前缀例如:CV_8UC3意味着我们使用8位长的无符号字符类型,每个像素有三个通道。这是最多四个通道号预定义的。*/
//s:	一个用于初始化矩阵元素的初始化的可选值. 旨在在构造之后完成对所有矩阵元素的值设定为特定值的参数, 使用赋值操作来完成这个动作.
  • 备注:其变形cv::Mat::Mat(Size size,int type,const Scalar & s ) 中Size对象也是一种尺寸对象的表达,可以简单理解为长宽高组成的一个Size对象(当然对于复杂图像而言,理解方式没错,但是具体表述得在理解后自行变通)

2、Mat (int ndims, const int *sizes, int type, const Scalar &s)

  • 参数解释:
//ndims:维度
//sizes:是一个整型数组,且数组中的元素不可变,维度是n就有n个元素,//每个元素的大小表示每个维度上的尺寸。
//type: 同上
//s:同上/*例如:int sz[3] = {2,2,2};Mat L(3,sz, CV_8UC(1), Scalar::all(0));这个对象就是一个3维的,每个维度大小为2,且每一个维度8位无符号的图像*/

3、Mat (const Mat &m)

  • 参数解释:
// m:另外一个Mat对象,拷贝构造函数。

4、Mat (const Mat &m, const Rect &roi)

  • 参数解释:
// 这里涉及到一个非常重要的参数:
// roi:感兴趣的区域,其类型为Rect,这个类型的对象就是一个矩形对象(方框)。//当然,感兴趣的区域不一定是方形的(可以是圆的...等),注意融会贯通。

其他的构造函数只要搞懂上边四个,都可以融会贯通。

1.1.2 感兴趣的区域ROI

  • 什么是ROI:(region of intrest)感兴趣的区域,有什么用途?旨在图像上选择自己感兴趣的区域用于其他的操作。是一种灵活的技术。
  • 如何使用?
    其实在上边已经悄悄地给大家演示了一种方式:
// 利用Rect来完成对Mat对象上感兴趣部分的截取:
Mat (const Mat &m, const Rect &roi) // 就是利用这个构造函数即可,其余的方式在后续的实战中慢慢积累,但是基础很重要,了解本质即活学活用了。
  • 关于Rect对象的说明:
    • 原文网址:Rect类的解释
      在这里插入图片描述只需要理解,正方形即可。
  • 示例:
Mat D (A, Rect(10, 10, 100, 100) ); // using a rectangle//其中Rect中的参数可以理解为x,y(正方形的起始点坐标【左上顶点】,两个10的含义),正方形区域的长宽(两个100的含义)
Mat E = A(Range::all(), Range(1,3)); // 利用矩阵行列也可以选择矩形区域,用的没有Rect多

二、图像的灰度处理

2.1 概念

  • 什么是灰度处理?
    以RGB色图片为例,使得三通道色相等(R=G=B)的处理手段称之为灰度处理,如果RGB是(0,0,0)为纯黑(0代表没有颜色,即每个通道都是黑的,所以最终是黑色的),如果是(255,255,255)就是白色(最亮)
  • 为什么进行灰度处理?
    一般图像处理默认采用灰度处理,因为彩色处理的难度和计算量非常大,且容易出错还耽误时间,在处理好后再转回彩色即可。

2.2 cvtColor()函数

  • 函数原型:

void cv::cvtColor	(	InputArray 	src,OutputArray 	dst,int 	code,int 	dstCn = 0 )	
  • 函数功能:图像的色彩空间转换格式,不仅仅局限于灰度转换,用途广泛。
  • 参数解释:
    • src : 原始图像
    • dst :处理后的图像
    • code :色彩空间的转换模式
    • dstCn :目标图像的通道数,默认为0(不改变不需要设置该值),如果是0表示自动沿用src的通道数
  • 关于code参数值的说明:其决定了色彩转换的模式,方式非常多,附原网址供参考:code参数值列表
    在这里插入图片描述红色框选的为将BGR图像进行灰度转换的参数,以下类似,大家根据实际情况进行选择即可。

2.3 示例

Mat img = imread("image.jpg");
Mat grey;
cvtColor(img, grey, COLOR_BGR2GRAY);
namedWindow("image", WINDOW_AUTOSIZE);
imshow("image", grey);
waitKey();

后续,我们继续学习。持续更新。

相关文章:

【C++的OpenCV】第四课-OpenCV图像常用操作(一):Mat对象深化学习、灰度、ROI

我们开始图像处理的基本操作的了解一、图像对象本身的加深学习1.1 Mat对象和ROI1.1.1 创建一个明确的Mat对象1.1.2 感兴趣的区域ROI二、图像的灰度处理2.1 概念2.2 cvtColor()函数2.3 示例一、图像对象本身的加深学习 1.1 Mat对象和ROI 这是一个技术经验的浅尝,所以…...

Propargyl-PEG1-SS-PEG1-PFP ester,1817735-30-0,炔基应用于生物标记

【中文名称】丙炔-单乙二醇-二硫键-单乙二醇-五氟苯酚酯【英文名称】 Propargyl-PEG1-SS-PEG1-PFP ester【结 构 式】【CAS号】1817735-30-0【分子式】C16H15F5O4S2【分子量】430.4【基团部分】炔基基团【纯度标准】95%【包装规格】1g,5g,10g&#xff0c…...

产品运营︱用户活跃度低的解决方法

app用户活跃度低,产品拉新变现效率慢,这是运营app时难免会遇到的情况。要想解决这类问题,就要从可能的原因下手,进行产品的优化改进,记录下改变后的关键数据变化,定期做好复盘工作进行调整。 一、app用户量…...

【华为OD机试模拟题】用 C++ 实现 - 求最大数字

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…...

吉卜力风格水彩画怎么画?

著名的水彩艺术家陈坚曾说:“水彩是用水润调和形成的饱和度极高的艺术画面,在纸上晕染的画面面积、强度等具有许多随意性,天空的颜色乌云密布,都是很随意的,难以模仿。” 是的,水彩画的妙处就在于不确定的…...

Python的类变量和对象变量声明解析

Python的类变量和对象变量声明解析 原文链接:https://www.cnblogs.com/bwangel23/p/4330268.html Python的类和C一样,也都是存在两种类型的变量,类变量和对象变量!前者由类拥有,被所有对象共享,后者由每个…...

#笨鸟先飞 猴博士电路笔记 第一篇 电路基础

第零课 基础知识串联与并联电源电势与电位差第一课 电阻电路的等效变换电压源串联电流源并联电压源和电流源串联电压源和电流源并联电压源转化为电流源电流源转化为电压源Δ-Y等效变换第二课 基尔霍夫定律基尔霍夫电流定律任一结点上流出电流之和等于流入电流之和。受控电流源&…...

快捷式~node.js环境搭建

1、安装包官网下载:Node.js (nodejs.org) 2、安装完成后修改环境变量 在上面已经完成了 node.js 的安装,即使不进行此步骤的环境变量配置也不影响node.js的使用 但是,若不进行环境变量配置,那么在使用命令安装 node.js全局模块 …...

ZooKeeper实现分布式队列、分布式锁和选举详解

提示:本文章非原创,记录一下优秀的干货。 [原创参考]:https://blog.csdn.net/qq_40378034/article/details/117014648 前言 ZooKeeper源码的zookeeper-recipes目录下提供了分布式队列、分布式锁和选举的实现GitHub地址。 本文主要对这几种实…...

【swift】swift quick start

一、常量和变量 常量let,变量var 也可以用于确定数组和字典的不可变和可变 二、数据类型: Int:整数类型,可表示有符号整数或无符号整数,分别使用Int和UInt表示。 Float:单精度浮点数类型,用于…...

浅谈volatile关键字

文章目录1.保证内存可见性2.可见性验证3.原子性验证4.原子性问题解决5.禁止指令重排序6.JMM谈谈你的理解6.1.基本概念6.2.JMM同步规定6.2.1.可见性6.2.2.原子性6.2.3.有序性6.3.Volatile针对指令重排做了啥7.你在哪些地方用过Volatile?volatile是Java提供的轻量级的…...

10 种 Spring事务失效场景

10 种 Spring事务失效场景 1.概述 Spring针对Java Transaction API (JTA)、JDBC、Hibernate和Java Persistence API(JPA)等事务 API,实现了一致的编程模型,而Spring的声明式事务功能更是提供了极其方便的事务配置方式,配合Spring Boot的自动…...

重读《DOOM启世录》

许多游戏开发者都是网瘾少年,抱着对游戏的热爱进入游戏行业,在经历996的加班加点,买房的压力,浮躁同样跟随着我们,我们是否还热爱着自己的事业,我们不是天才,也成不了卡马克,但是我们…...

巧用性格上的差异来组建团队

你好,我是得物 App 交易平台及中间件平台的 Team Leader Alan。 组建团队过程中,你有没有遇到过类似的场景:团队中某些人之间总是互相不对付、气场不合,不管是日常沟通中还是方案对齐,总是会出现面红耳赤的场面。 从…...

Leetcode11. 盛最多水的容器

一、题目描述: 给定一个长度为 nnn 的整数数组 heightheightheight 。有 nnn 条垂线,第 iii 条线的两个端点是 (i,0)(i, 0)(i,0) 和 (i,height[i])(i, height[i])(i,height[i]) 。 找出其中的两条线,使得它们与 xxx 轴共同构成的容器可以容…...

Java笔记026-集合/数组、Collection接口、ArrayList、Vector、LinkedList

集合集合的理解和好处保存多个数据使用的是数组,分析数组的弊端数组1、长度开始必须指定,而且一旦指定,不能更改2、保存的必须为同一类型的元素3、使用数组进行增加/删除元素的示意代码-比较麻烦Person数组扩容示意代码Person[] pers new Pe…...

Hive学习——分桶抽样、侧视图与炸裂函数搭配、hive实现WordCount

目录 一、分桶抽样 1.抽取表中10%的数据 2.抽取表中30%的数据 3.取第一行 4.取第10行 5.数据块抽样 6.tablesample详解 二、UDTF——表生成函数 1.explode()——炸裂函数 2.posexpolde()——只能对array进行炸裂 3.inline()——炸裂结构体数组 三、UDTF与侧视图的搭…...

大数据算法

1. TOP K 算法 有10个⽂件,每个⽂件1G,每个⽂件的每⼀⾏存放的都是⽤户的 query,每个⽂件的 query 都可能重复。要求你按照 query 的频度排序。 方法1: 顺序读取10个⽂件,按照 hash(query)%10 的结果将 query 写⼊到…...

非暴力沟通读书笔记

浅读《非暴力沟通》,本书对于沟通的方式总结成了一个方法论,从13个章节去概述非暴力沟通的方法和重点。其中最重要的是非暴力沟通四要素,观察、感受、需要、请求。同时在沟通中注意观察,投入爱,重视倾听的力量&#xf…...

代码随想录【Day21】| 530. 二叉搜索树的最小绝对差、501. 二叉搜索树中的众数、236. 二叉树的最近公共祖先

530. 二叉搜索树的最小绝对差 题目链接 题目描述: 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。 示例: 提示:树中至少有 2 个节点。 难点: 解答错误!仅考虑了…...

注意啦,面试通过后,别忘了教师资格证认定

所有要「教师资格证认定」教程的宝子们看过来面试合格的小伙伴都可以进行认定工作 . 认定时间 查询各省份认定公告,确定认定时间范围。以下是公告汇总网址(https://www.jszg.edu.cn/portal/qualification_cert/dynamics?id21691) 认定次数 每…...

【LeetCode】No.154. 寻找旋转排序数组中的最小值 II -- Java Version

题目链接:https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array-ii/ 1. 题目介绍(154. 寻找旋转排序数组中的最小值 II) 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后&#xff0…...

RestTemplate远程调用

我们现在项目中使用的RPC远程调用技术是Dubbo实际上除了Dubbo技术之外,还有很多远程调用的方法它们有些调用的思想都和Dubbo完全不同Dubbo是SpringCloudAlibaba提供的功能强大的RPC框架但是Dubbo功能也有限制,如果我们想调用的方法不是我们当前项目的组件或功能,甚至想调用的方…...

registerForActivityResult使用

目录 针对 activity 结果注册回调 启动 activity 以获取其结果 在单独的类中接收 activity 结果 测试 创建自定义协定 registerForActivityResult()是startActivityForResult()的替代,简化了数据回调的写法 启动另一个 activity&#x…...

工作中,python真的有用吗?

普通上班族学Python有用吗? 那么,我也在这里提出一个问题:Python究竟适不适合办公人士来学习,以及学了之后究竟能不能给我的工作来带质一般的飞跃? 以我的亲身经历为例,我可以很负责的告诉大家&#xff0c…...

固态继电器控制电路

固态继电器控制电路 固态继电器(SSR)的种类和型号很多,因此其输入控制方法和控制电路也相应众多。固态继电器(SSR)的共同特点在于驱动电流或驱动电压小,即只需输入一个小信号即可控制SSR的开关。 如果需要…...

数仓、数据湖、湖仓一体、数据网格的探索与研究

第一代:数据仓库 定义 为解决数据库面对数据分析的不足,孕育出新一类产品数据仓库。数据仓库(Data Warehouse)是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策和信息的全局共享。 数…...

设计模式系列 - 备忘录模式

介绍&定义 备忘录模式,也叫快照(Snapshot)模式,英文翻译是 Memento Design Pattern。在 GoF 的《设计模式》一书中,备忘录模式是这么定义的: Captures and externalizes an object’s internal state…...

详细介绍React生命周期和diffing算法

事件处理 1.通过onXxx属性指定事件处理函数(注意大小写) React使用的是自定义(合成)事件, 而不是使用的原生DOM事件 —— 为了更好的兼容性;React中的事件是通过事件委托方式处理的(委托给组件最外层的元素) ——为了的高效。 2.通过event.target得到发生事件的DOM…...

面向对象的特点

1、什么是对象对象的含义是指具体的某一个事物,即在现实生活中能够看得见摸得着的事物。在面向对象程序设计中,对象所指的是计算机系统中的某一个成分。在面向对象程序设计中,对象包含两个含义,其中一个是数据,另外一个…...