OpenCV入门(三)快速学会OpenCV2图像处理基础
OpenCV入门(三)快速学会OpenCV2图像处理基础
1.颜色变换cvtColor
imgproc的模块名称是由image(图像)和process(处理)两个单词的缩写组合而成的,是重要的图像处理模块,主要包括图像滤波、几何变换、直方图、特征检测与目标检测等。
这个模块包含一系列的常用图像处理算法,相对而言,imgproc是OpenCV一个比较复杂的模块。OpenCV中的一些画图函数也属于这个模块。
颜色变换是imgproc模块中一个常用的功能。
我们生活中大多数看到的彩色图片都是RGB类型的,但是在进行图像处理时需要用到灰度图、二值图、HSV、HSI等颜色制式,OpenCV提供了cvtColor()函数来实现这些功能。
这个函数用来进行颜色空间的转换,随着OpenCV版本的升级,对于颜色空间种类的支持越来越多,涉及不同颜色空间之间的转换,比如RGB和灰度的互转、RGB和HSV(六角锥体模型,这个模型中颜色的参数分别是色调H、饱和度S、明度V)的互转等。
cvtColor函数声明如下:
cvtColor(src, code[, dst[, dstCn]])
其中,
参数src表示输入图像,即要进行颜色空间变换的原图像,可以是数组矩阵;
code表示颜色空间转换代码,即在此确定将什么制式的图片转换成什么制式的图片;dst表示输出与src相同大小和深度的图像,即进行颜色空间变换后存储图像;
dstCn表示目标图像通道数,默认取值为0,如果参数为0,则从src和代码自动获得通道的数量。
函数cvtColor的作用是将一个图像从一个颜色空间转换到另一个颜色空间,但是从RGB向其他类型转换时必须明确指出图像的颜色通道。
值得注意的是,在OpenCV中,其默认的颜色制式排列是BGR而非RGB。对于24位颜色图像来说,前8位是蓝色,中间8位是绿色,最后8位是红色。
需要注意的是,cvtColor函数不能直接将RGB图像转换为二值图像,需要借助threshold函数。
另外,如果对8-bit图像使用cvtColor()函数进行转换将会丢失一些信息。我们常用的颜色空间转换有两种:将BGR转换为Gray或HSV。
下面看一个例子,将图片转换为灰度图和HSV。
import cv2#将图片转换为灰度图src_image = cv2.imread("test.jpg")gray_image = cv2.cvtColor(src_image, cv2.COLOR_BGR2GRAY)#将图片转换为HSVhsv_image = cv2.cvtColor(src_image, cv2.COLOR_BGR2HSV)cv2.imshow("src_image", src_image)cv2.imshow("gray_image", gray_image)cv2.imshow("hsv_image", hsv_image)cv2.waitKey(0)
首先读取工程目录下的图片test.jpg,然后调用cvtColor函数将原图转为灰度图,再调用cvtColor函数将原图转为HSV图,最后将3幅图片显示出来。
运行实例,结果如图所示。

2.截取图像
2.1切片和索引
现在我们把磁盘上的一幅图片文件读到内存中,比如:
img = cv.imread("p1.jpg"); #读取一幅图片
实际上是一个NumPy包的array数组,它包含着每个像素点的数据。因此熟悉NumPy是操作图像数据的基础。NumPy是Python中用于数据分析、机器学习、科学计算的重要软件包。它极大地简化了向量和矩阵的操作及处理。Python中的不少数据处理软件包依赖于NumPy作为其基础架构的核心部分(例如scikit-learn、SciPy、Pandas和TensorFlow)
NumPy包提供了两种基本对象:ndarray(N维数组)和func(通用函数)。ndarray数组用来存放相同数据类型的多维数组,func是可以对数组进行运算处理的函数。
ndarray对象的内容可以通过索引或切片来访问和修改,与Python中list的切片操作一样。ndarray数组可以基于0~n的下标进行索引,切片对象可以通过内置的slice函数,并设置start、stop及step参数进行,从原数组中切割出一个新数组。比如:
a = np.arange(10)s = slice(2,7,2) #从索引2开始到索引7停止,间隔为2print (a[s])
输出结果为:[2 4 6]。
在以上实例中,首先通过arange()函数创建ndarray对象。然后分别设置起始、终止和步长的参数为2、7、2。我们也可以通过冒号分隔切片参数start:stop:step来进行切片操作:
a = np.arange(10)b = a[2:7:2] #从索引2开始到索引7停止,间隔为2print(b)
输出结果为:[2 4 6]。
其中,有关冒号的解释是:如果只放置一个参数,如[2],就将返回与该索引相对应的单个元素;如果为[2:],就表示从该索引开始以后的所有项都将被提取;如果使用了两个参数,如[2:7],那么提取两个索引(不包括停止索引)之间的项。
比如:
a = np.arange(10) # [0 1 2 3 4 5 6 7 8 9]b = a[5]print(b)
输出结果为5。
比如:
a = np.arange(10)print(a[2:])
输出结果为:[2 3 4 5 6 7 8 9]。
再比如:
a = np.arange(10) # [0 1 2 3 4 5 6 7 8 9]print(a[2:5])
输出结果为:[2 3 4]。
多维数组同样适用上述索引提取方法:
a = np.array([[1,2,3],[3,4,5],[4,5,6]])print(a)#从某个索引处开始切割print('从数组索引 a[1:] 处开始切割')print(a[1:])
输出结果为:
[[1 2 3][3 4 5][4 5 6]]从数组索引 a[1:] 处开始切割[[3 4 5][4 5 6]]
由于图像是数组形式所以我们可以用切片进行截取图像,代码如下:
import cv2#将图片转换成灰度图
src_image = cv2.imread("test.jpg")
print(src_image)
img=src_image[20:100,20:250]
cv2.imshow("cut",img)
cv2.waitKey(0)
cv2.destoryAllWindos()
输出结果:

3.获取颜色通道
cv2.split可以帮助我们获取不同颜色通道。
声明如下:
cv2.split(img)
实例代码:
# 获取颜色通道
img = cv2.imread("picture.jpg") # 读取图片
b, g, r = cv2.split(img) # 分割颜色通道
print(r.shape, g.shape, b.shape) # 调试输出
输出结果:
(1263, 1920) (1263, 1920) (1263, 1920)
4.单通道显示
实例代码:
import cv2
src_image = cv2.imread("test.jpg")
cur_img=src_image.copy()#深拷贝
cur_img[:, :, 0] = 0 # B通道设置为0
cur_img[:, :, 1] = 0 # G通道设置为0
cv2.imshow("B channel", cur_img) # 图片展示
cv2.waitKey(0)
cv2.destoryAllWindos()
输出结果:

相关文章:
OpenCV入门(三)快速学会OpenCV2图像处理基础
OpenCV入门(三)快速学会OpenCV2图像处理基础 1.颜色变换cvtColor imgproc的模块名称是由image(图像)和process(处理)两个单词的缩写组合而成的,是重要的图像处理模块,主要包括图像…...
基于PySide6的MySql数据库快照备份与恢复软件
db-camera 软件介绍 db-camera是一款MySql数据库备份(快照保存)与恢复软件。功能上与dump类似,但是提供了相对有好的交互界面,能够有效地管理导出的sql文件。 使用场景 开发阶段、测试阶段,尤其适合单人开发的小项目…...
BI不是报表,千万不要混淆
商业智能BI作为商业世界的新宠儿,在市场上实现了高速增长并获得了各领域企业的口碑赞誉。 很多企业把商业智能BI做成了纯报表,二维表格的数据展现形式,也有一些简单的图表可视化。但是这些简单的商业智能BI可视化报表基本上只服务到了一线的…...
sizeof以及strlen的用法以及注意事项
大家都知道,在c中算字符串长度和所占空间大小事不可避免的,甚至再有的时候,我们在写代码的过程中,就会用到这些数据。比如,下面这道题 struct Test { int Num; char *pcName; short sDate; char cha[2]; short sBa[4];…...
数据结构-链表-单链表(3)
目录 1. 顺序表的缺陷 2. 单链表 2.1 单链表的基本结构与接口函数 2.2 重要接口 创建新节点的函数: 2.2.1 尾插 2.2.2 头插 2.2.3 尾删 2.2.4 头删 2.2.5 查找 2.2.6 插入 2.2.7 删除 2.2.8 从pos后面插入 2.2.9 从pos后面删除 3. 链表的缺陷与优势&…...
【SpringBoot初级篇】JdbcTemplate常用方法
【SpringBoot初级篇】JdbcTemplate常用方法JdbcTemplate 查询JdbcTemplate 插入、更新、删除execute执行任意的SQLNamedParameterJdbcTemplate函数场景说明update(String sql, Nullable Object… args)增,删,改queryForObject(sql, Integer.class)查询返…...
React(三):脚手架、组件化、生命周期、父子组件通信、插槽、Context
React(三)一、脚手架安装和创建1.安装脚手架2.创建脚手架3.看看脚手架目录4.运行脚手架二、脚手架下从0开始写代码三、组件化1.类组件2.函数组件四、React的生命周期1.认识生命周期2.图解生命周期(1)Constructor(2&…...
[教程]使用 Git 克隆指定分支
Git 是我们开发过程中经常使用到的版本管理工具,在平常情况下我们从远程克隆的时候会将整个库克隆下来,这会包括整个版本库的历史提交记录和远程库里的所有分支。但在一些情况下,比如我们并不需要查看历史提交记录而只是希望能够获取到最新的代码&#x…...
Redis实现服务注册与服务发现源码阅读(Go语言)
Redis实现服务注册与服务发现源码阅读 背景 近期在看开源项目CloudWeGo中看到目前GoLang微服务框架Hertz中支持通过Redis实现服务注册与服务发现功能。便想着阅读下源码 源码阅读 gut clone了hertz-contrib后看到在一级目录下有目前各种主流的服务注册与发现的实现方案。为…...
论文复现-3
模型构建中的运算 数据集是CONLL03 这个数据集共有4种实体类型,所以,在做实体描述的embedding时,得到的语义表示的Tensor大小为 : 4*max_len, 具体指的是: type_input_ids: torch.LongTensor None, type_attention_m…...
667知识点 | 经过三年实战检验的667知识清单
文章目录 前言第一章 信息与信息资源第二章 信息社会第三章 信息交流第四章 信息技术第五章 信息组织第六章 信息管理活动第七章 信息资源人文管理第八章 信息资源经济管理第九章 信息资源系统管理第十章 信息资源管理专门化前言 参考书目:《信息管理导论(第三版)》党跃武推…...
后端快速上手前端三剑客 HtmlCSSJavaScript
文章目录前言HTML1.基础标签2.多媒体标签:3.表格&列表&布局4.表单CSS1.简介2.导入方式3.选择器JavaScript1.简介2.引入方式3.基本语法4.对象(1) 基本对象(2) BOM对象(3) DOM对象5.事件前言 结构:HTML 表现:CSS 行为:Java…...
Cdiscount、Allegro如何利用测评补单自养号提升店铺权重和流量
Allegro成立于 1999 年是在波兰最受欢迎的电商平台,75%的波兰人都知道该网站,Allegro的品牌认知度在波兰高达98%。Allegro平台卖家的数量目前还是比较少的约为13万,最重要的就是中国卖家占比少,所以竞争也比较低,像是美…...
第16天-性能压测:压力测试,性能监控,优化QPS,Nginx动静分离
1.性能监控 1.1.JVM架构 运行时数据区: 方法区:最重要的内存区域,多线程共享,保存了类的信息(名称、成员、接口、父类),反射机制是重要的组成部分,动态进行类操作的实现;…...
【python 基础篇 十一】python的函数-------函数的偏函数 高阶函数 返回函数 匿名函数 闭包
目录1.偏函数2.高阶函数3.返回函数4.匿名函数5.闭包1.偏函数 概念 当我们写一个参数比较多的函数时,如果有些参数,大部分场景下都是某一个固定值,那么为了简化使用,就可以创建一个新函数,指定我们要使用的函数的某个…...
妇女节到了,祝福所有女神 Happy Women‘s Day!
在每年3月8日人们庆祝妇女节 Womens Day is cllebrated on March 8 every year.国际妇女节(IWD),中国内地称“三八”国际劳动妇女节或国际劳动妇女节。是在每年的3月8日为庆祝妇女在经济、政治和社会等领域作出的重要贡献和取得的…...
etcd集群通过 Leader 写入数据,为什么K8s HA集群中讲每个 kube-apiserver 只和本机的 ETCD 通信
写在前面 对这个我不太明白,所有在 stackOverflow 的请教了大佬这里分享给小伙伴理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整…...
HTML 表单
HTML 表单和输入 HTML 表单用于收集不同类型的用户输入。 在线实例 创建文本字段 (Text field) 本例演示如何在 HTML 页面创建文本域。用户可以在文本域中写入文本。 创建密码字段 本例演示如何创建 HTML 的密码域。 (在本页底端可以找到更多实例。) …...
HTML、CSS学习笔记5(移动端基础知识、Flex布局)
一、移动端基础知识 1.PC端和移动端区别 移动端:手机版网页,手机屏幕小,网页宽度多数为100%,没有版心 PC端:电脑版网页,屏幕大,网页固定版心 PC端和移动端不是同一个网页 2.如何在电脑里面…...
【Java学习笔记】2.Java 开发环境配置
Java 开发环境配置 在本章节中我们将为大家介绍如何搭建Java开发环境。 window系统安装java 下载JDK 首先我们需要下载 java 开发工具包 JDK,下载地址:https://www.oracle.com/java/technologies/downloads/,在下载页面中根据自己的系统选…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
【Java】Ajax 技术详解
文章目录 1. Filter 过滤器1.1 Filter 概述1.2 Filter 快速入门开发步骤:1.3 Filter 执行流程1.4 Filter 拦截路径配置1.5 过滤器链2. Listener 监听器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技术3.1 Ajax 概述3.2 Ajax 快速入门服务端实现:客户端实现:4. Axi…...
