机器视觉学习(四)—— 图像的色彩

目录

一、图像的基础知识

二、NumPy模块

三、图像色彩变化

3.1 RGB图像的分通道显示

3.2 HSV图像的分通道显示


一、图像的基础知识

总结的笔记:

"""
二值图:   每个像素取值 0或1,图像显示出来只有黑白色;     黑色:0      白色:1
灰度图:   每个像素8位表示(0~255)单通道显示亮度;     黑色:0     白色:255
彩色图:   每个像素有RGB三个通道分量表示,每个分量0~255,每个通道单拿出来都是一张灰度图;黑色(0,0,0)     白色(255,255,255)
RGB:        R:红色              G:绿色                  B:蓝色
Image(BGR),Merge(RGB):  三个图层的顺序不同,由上到下
HSV:        H:色相              S:饱和度                V:明度OpenCV的 HSV格式中, H(色彩/色度)的取值范围是 [0,180], 
S(饱和度)的取值范围 [0,255], V(亮度)取值范围 [0,255]图像色彩空间转换:cv2.cvtColor(img,code)img:        要更改其色彩空间的图像code:       色彩空间转换的代码cv2.COLOR_BGR2GRAY:         表示从 BGR转换为灰度图像cv2.COLOR_BGR2HSV:          表示从 BGR转换为 HSV图像图层(通道)分离:cv2.split(img)img:        要分离的图像图层(通道)合并:cv2.merge((a,b,c))a,b,c:      要合并的色彩通道"""

二、NumPy模块

NumPy(Numerical Python)是Python科学计算的核心库之一,提供了高性能的多维数组对象(ndarray)和用于数组操作的函数。它还包括用于处理线性代数、傅里叶变换和随机数生成的工具。

下面是一些常用的 numpy 模块函数的表格:

函数描述
numpy.array()创建一个数组
numpy.zeros()创建一个指定形状和数据类型的全零数组
numpy.ones()创建一个指定形状和数据类型的全1数组
numpy.arange()创建一个指定范围和步长的数组
numpy.linspace()创建一个指定范围内等间距的数组
numpy.reshape()改变数组的形状
numpy.ndim()返回数组的维度
numpy.size()返回数组中的元素数目
numpy.dtype()返回数组的数据类型
numpy.min()返回数组的最小值
numpy.max()返回数组的最大值
numpy.mean()返回数组的平均值
numpy.sum()返回数组的和
numpy.var()返回数组的方差
numpy.std()返回数组的标准差
numpy.dot()计算两个数组的点积
numpy.transpose()反转数组的维度
numpy.vstack()垂直堆叠数组
numpy.hstack()水平堆叠数组
numpy.concatenate()按指定的维度连接数组
numpy.split()将数组分割为多个子数组
numpy.insert()将元素插入到数组的指定位置
numpy.delete()删除数组中的指定元素
numpy.copy()复制数组
numpy.sort()对数组进行排序
numpy.unique()返回数组中的唯一值
numpy.where()返回满足条件的数组元素的坐标
numpy.isnan()检查数组元素是否为 NaN
numpy.isinf()检查数组元素是否为无穷大

这只是一小部分 numpy 模块函数的示例,numpy 模块提供了许多其他功能强大的函数。你可以在 numpy 官方文档中找到更多信息:https://numpy.org/doc/icon-default.png?t=N7T8https://numpy.org/doc/

三、图像色彩变化

图像颜色通道是指图像中的每个像素所包含的颜色信息。

在彩色图像中,通常有三个颜色通道,分别是红色通道(R通道)、绿色通道(G通道)和蓝色通道(B通道)。每个通道都包含着图像中相应颜色的亮度信息,通过对这些通道的组合和调整,可以得到不同的颜色效果和色彩变化。

除了RGB颜色模式外,还有其他的颜色模式,如CMYK模式(青、品红、黄、黑)等,这些颜色模式也有对应的通道。在灰度图像中,只有一个颜色通道,代表灰度级别。

示例:(简易代码)

import cv2# 加载图像
image = cv2.imread("image.jpg") # 在运行代码时将image.jpg替换为您的图像文件路径# 分割图像的RGB通道
blue, green, red = cv2.split(image)# 修改蓝色通道为0
blue = blue * 0# 修改绿色通道为255
green = green * 0 + 255# 修改红色通道为0
red = red * 0# 合并修改后的通道
modified_image = cv2.merge((blue, green, red))# 显示修改后的图像
cv2.imshow("Modified Image", modified_image)
cv2.waitKey(0)               # 等待用户按下任意键
cv2.destroyAllWindows()

复杂代码(需理解):

import cv2
import numpy as np# 读取图像
image = cv2.imread('image.png')    # 在运行代码时将image.png替换为您的图像文件路径# 提取RGB颜色通道
red_channel = image[:,:,2]
green_channel = image[:,:,1]
blue_channel = image[:,:,0]# 将RGB颜色通道转换为不同颜色值
red_channel = np.zeros(red_channel.shape, dtype=np.uint8)  # 设置红色通道为0
green_channel = np.zeros(green_channel.shape, dtype=np.uint8)  # 设置绿色通道为0
blue_channel = np.ones(blue_channel.shape, dtype=np.uint8) * 255  # 设置蓝色通道为255# 将修改后的颜色通道重新组合成图像
new_image = cv2.merge((blue_channel, green_channel, red_channel))# 显示原始图像和修改后的图像
cv2.imshow('Original Image', image)        # 名称可修改
cv2.imshow('Modified Image', new_image)    # 名称可修改# 保存修改后的图像
cv2.imwrite('output.jpg', new_image)# 等待按下任意键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

3.1 RGB图像的分通道显示

在OpenCV中,图像通道表示图像中的颜色信息。通常,一个彩色图像会有三个通道,分别是红色通道、绿色通道和蓝色通道。每个通道都表示了图像中对应颜色的亮度或强度。

在OpenCV中,可以使用函数cv2.split()来将彩色图像分离为各个通道。这个函数将返回一个包含各个通道的列表。

以下是一个使用OpenCV分离RGB图像通道的例子:

import cv2# 读取彩色图像
image = cv2.imread('image.jpg')# 分离通道
b, g, r = cv2.split(image)# 显示分离的通道
cv2.imshow('Blue', b)
cv2.imshow('Green', g)
cv2.imshow('Red', r)# 等待按下任意按键继续程序
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的例子中,cv2.split()函数将彩色图像分离为红色通道(r 通道)、绿色通道(g 通道)和蓝色通道(b 通道)。我们通过cv2.imshow()函数将每个通道显示出来。

注意:

在将通道分离后,每个通道的数据类型是uint8,并且只包含该通道的像素值。

3.2 HSV图像的分通道显示

cv2.cvtColor()函数是OpenCV库中用于图像颜色空间转换的函数。该函数的返回值是转换后的图像。它的原型为:

cv2.cvtColor(src, code[, dst[, dstCn]]) -> dst

参数解释:

  • src:输入图像,可以是NumPy数组或图片文件的路径。
  • code:颜色空间转换的代码,可以是下面这些之一:
    • cv2.COLOR_BGR2GRAY:BGR彩色图像转灰度图。
    • cv2.COLOR_BGR2HSV:BGR彩色图像转HSV颜色空间。
    • cv2.COLOR_BGR2RGB:BGR彩色图像转RGB颜色空间。
    • cv2.COLOR_BGR2LAB:BGR彩色图像转Lab颜色空间。
    • cv2.COLOR_BGR2YCrCb:BGR彩色图像转YCrCb颜色空间。
  • dst可选参数,输出的图像数组。如果不提供该参数,函数会自动创建一个与输入图像相同类型和大小的数组。
  • dstCn可选参数,输出图像的通道数。如果该参数为0,则输出图像和输入图像通道数相同。否则,输出图像将被重新处理为指定的通道数。

以下是一个使用OpenCVBGR转换为 HSV图像再进行分离图像通道的例子:

import cv2 as cvimg = cv.imread("D:/Open_CV/OpenCV_demo/Pictures/r4.png",1)     
# 或 img = cv.imread("Pictures/r4.png",cv.IMREAD_COLOR)img = cv.resize(img,(320,320),interpolation=cv.INTER_AREA)       # 图像缩放 (长,宽)R,G,B = cv.split(img)
MergeRGB = cv.merge((R,G,B))                # 三个图层的顺序不同,由上到下
MergeBGR = cv.merge((B,G,R))hsv_img = cv.cvtColor(img,cv.COLOR_BGR2HSV)                 # 表示从 BGR转换为 HSV图像
H,S,V = cv.split(hsv_img)                   # 图层(通道)分离成 H,S,V
MergeHSV = cv.merge((H,S,V))                # 将 H,S,V 合并cv.imshow('R4',img)
cv.imshow("B",B)
cv.imshow("G",G)
cv.imshow("R",R)
cv.imshow("MergeRGB",MergeRGB)
cv.imshow("MergeBGR",MergeBGR)cv.imshow("H",H)
cv.imshow("S",S)
cv.imshow("V",V)
cv.imshow("MergeHSV",MergeHSV)xin = cv.waitKey(0)                 # 按 ESC键关闭所有窗口
if xin == 27:               cv.destroyAllWindows()

运行结果:

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

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

相关文章

IoT 物联网场景中 LoRa + 蓝牙Bluetooth 室内场馆高精定位技术全面解析

基于LoRa蓝牙的室内场景定位技术,蓝牙主要负责位置服务,LoRa主要负责数据传输。 01 LoRa和蓝牙技术 LoRa全称 “Long Rang”,是一种成熟的基于扩频技术的低功耗、超长距离的LPWAN无线通信技术。LoRa主要采用的是窄带扩频技术,抗干…

基于深度学习的口罩人脸识别研究进展

MTCNN模型训练输入的所有图像都是正样本(戴口罩的照片),没有负样本作为模型输入。在后续的识别任务模块中,导入MTCNN模型检测结果,对特征点进行编码比较进行识别。 基于MTCNN的口罩人脸识别框架可分为四个阶段&#xf…

大美博罗迎盛会,“村ART“点亮新征程

三月的博罗,春意盎然,生机勃勃。在这万物复苏的美好时节,首届"村ART"乡村艺术作品评比大赛盛大开启。本次大赛由博罗县政府和泰康保险集团联合主办,以"农民画农民、农民画农村"为主题,旨在为广大农民朋友搭建一个展示才华、抒发情怀的广阔舞台,用艺术之光点…

IDEA : 已经有一个永久破解版的IDEA2019版本,现在又想安装最新版本的,俩版本共存,发现新版本打不开的解决方案

在新文件的目录下,注释掉一行19版本的地址 地址:C:\Users\23999\AppData\Roaming\JetBrains\IntelliJIdea2023.2 (不同电脑Users后边的一个地址的注释会不一样) 然后找到该目录下的indea64.exe.vmoptions 用 记事本 打开 在-javaagent 那一栏里会自动给…

营气卫气是什么?循行规律?

营在脉中,卫在脉外,营周不休。 营气 营在脉中运行,为什么营气能在脉中运行呢?因其性柔顺精专,所以营气能循行、运行于经脉之中,正如《灵枢卫气》所云“其精气之行于经者,为营气”。 营气的运行…

使用CURL命令确定Access-Control-Allow-Origin问题

一、问题描述 有前端小伙伴反馈ajax请求遇到跨域问题,也让后端小伙伴设置了跨域允许,但诡异的事情是在前端小伙伴的微信开发者工具中Network headers中看到了两行:Access-Control-Allow-Origin,其中居然出现了:“Acce…

uniapp兴趣社区交友圈子系统小程序源码 thinkphp框架后台管理

圈子论坛社区系统,含完整的后台PHP系统。功能:小程序授权登陆,H5和APP,手机号登陆,发帖,建圈子、发活动。圈主可置顶推荐帖子,关注、点赞、评论、交流等。可作为圈子贴吧等自媒体。 兴趣社区圈…

丁腈手指套:守护你的指尖,赋予无限可能

在繁忙的现代生活中,无论是在工业车间、医疗场所,还是日常生活的琐碎细节中,保护我们的双手都显得尤为重要。丁腈手指套作为一种专业的防护用品,以其出色的防护性能、舒适性和灵活性,为众多领域的工作者提供了便捷而高…

SQLServer介绍、安装、数据库导入导出

安装 本地运行的:cn_sql_server_2008_r2_express_with_management_tools_x64.exe 官网:SQL Server下载 同上链接下载SSMS管理 SQL Server Management Studio(SSMS)是干什么的? SQL Server Management Studio&#x…

理解计算属性等

计算属性 计算属性的作用是将写在computed内的写了对应的属性名,属性值都是函数,将这属性值的函数调用之后的返回值赋给属性名的变量。因此其实计算属性内的是值,不是方法,因此写插值等语句是只是写变量,而不是调用。且…

Python零基础---爬虫技术相关

python 爬虫技术,关于数据相关的拆解: 1.对页面结构的拆解 2.数据包的分析(是否加密了参数)(Md5 aes)难易程度,价格 3.对接客户(433,334) # 数据库 CSV 4.结单(发一部分数据&a…

【Spring Boot 3】整合nacos + Dubbo3 的Spring cloud Alibaba项目

这里写自定义目录标题 前言1、项目结构2、搭建nacos注册中心、配置中心3、项目依赖4、common模块5、provider服务提供者pom文件bootstrap.yml在nacos中添加配置启动类UserServiceImpl consumer服务消费者pom文件bootstrap.ymlnacos配置启动类UserController 测试END 前言 在sp…

Git——本地使用详解

目录 Git1、开始版本控制1.1、初始化Repository1.2、使目录脱离Git控制 2、把文件交给Git管控2.1、创建文件后交给Git2.2、git add之后再次修改文件2.3、git add "--all"与"."参数区别2.4、把暂存区的内容提交到存储库里存档 3、工作区、暂存区与存储库3.1…

车规级芯片又添新成员!NCV7520FPR2G 可编程六路低压侧 MOSFET 预驱动器

NCV7520FPR2G是一款可编程六沟道低压侧 MOSFET 预驱动器,是一个 FLEXMOS™ 汽车级产品系列,用于驱动逻辑电平 MOSFET。NCV7520FPR2G可通过串行 SPI 和并行输入组合控制。该器件提供可兼容 3.3 V/5 V 的输入,串行输出驱动器可基于 3.3 V 或 5 …

Linux常用操作命令和服务器硬件基础知识

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

【数据库】数据库基本知识

1.数据库的四个基本概念 1.1 数据:描述事务的符号记录 1.2 数据库:概括的说,数据库数据具有永久存储、有组织的、可共享的大量数据的集合,数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的…

大数据架构设计

本博客地址:https://security.blog.csdn.net/article/details/136657478 一. 基本概念 1、解决传统数据架构无法及时响应用户请求的常用解决方法: ● 增加异步处理队列,通过工作处理层批量处理异步处理队列中的数据修改请求。 ● 建立数据库…

进入docker容器中安装软件失败解,国外源慢,时间不同步,执行命令权限不够等问题解决办法

进入docker容器中安装软件失败解,时间不同步, 国外源慢,执行命令权限不够 等问题解决办法 首先我进入docker容器中,为了安装一个软件,引出了很多报错问题,报错如下: 1、无法用 ifconfig 或者 ip addr 的方…

【解读】NIST网络安全框架CSF 2.0

2014年,NIST(美国国家标准与技术研究所,类似于中国的工信部)首次发布了网络安全框架CSF(Cybersecurity Framework),十年后,在2024年2月26日发布了重大更新(CSF 2.0)&…

第100+2步 ChatGPT文献复现:ARIMAX预测肺结核 vol. 2

基于WIN10的64位系统演示 一、写在前面 各位大佬,不知大家是否把结果一复现出来了呢? 我们继续往下看,首先复习一下: 《PLoS One》杂志的2023年一篇题目为《A comparative study of three models to analyze the impact of ai…