day3 - 图像在不同色彩空间间的转换

news2024/11/23 21:40:16

本期将了解三种不同的颜色空间,RGB,HSV,GRAY。会使用OpenCV来读取三种颜色空间,并且操作不同空间的转换,观察不同颜色空间的特点。

完成本期内容,你可以:

  • 了解RGB,HSV,GRAY三种颜色空间的定义

  • 掌握读取图片到不同的颜色空间

  • 掌握三种颜色空间的转换

  • 掌握如何拆分、合并图像通道

若要运行案例代码,你需要有:

  • 操作系统:Ubuntu 16 以上 或者 Windows10

  • 工具软件:VScode 或者其他源码编辑器

  • 硬件环境:无特殊要求

  • 核心库:python 3.6.13, opencv-contrib-python 3.4.11.39,opencv-python 3.4.2.16

点击下载源码


RGB色彩空间

  • RGB色彩空间包含3个通道,R通道,G通道,B通道。

  • R 通道指的是红色(Red) 通道; G 通道指的是绿色通道; B 通道指的是蓝色(Blue) 通道, 并且每个色彩通道都在区间[ 0 , 25 5 ] 内进行取值。

  • 图像在计算机中是以矩阵的形式保存的,对于RGB图像模式,一张图像保存了三个矩阵,每个矩阵用于表示其中的一种颜色。由于矩阵的顺序不同,会有RGB模式,RBG模式,BRG模式等。但无论是RGB模式,RBG模式,还是BRG模式,本质上都是一种模式,只不过颜色矩阵的存储顺序不同。

请添加图片描述

HSV色彩空间

  • HSV 色彩空间是基于色调、饱和度和亮度而言的。

  • 色调(H)是指光的颜色,例如彩虹中的赤、橙、黄、绿、青、蓝、紫分别表示不同的色调,在OpenCV中, 色调在区间[ 0 , 180 ] 内取值。

  • 饱和度(S) 是指色彩的深浅。在OpenCV 中, 饱和度在区间[ 0 , 255 ] 内取值。当饱和度为0 时,图像将变为灰度图像。

  • 亮度(V) 是指光的明暗。与饱和度相同, 在OpenCV中, 亮度在区间[ 0 , 255 ]内取值。亮度值越大, 图像越亮; 当亮度值为0 时, 图像呈纯黑色。

请添加图片描述

GRAY色彩空间

  • GRAY 色彩空间通常指的是灰度图像, 灰度图像是一种每个像素都是从黑到白, 被处理为256 个灰度级别的单色图像。

  • 这256 个灰度级别分别用区间[ 0 , 255 ] 中的数值表示。其中,”0 ”表示纯黑色,“ 255 ” 表示纯白色, 0 ~255 之间的数值表示不同亮度( 即色彩的深浅程度) 的深灰色或者浅灰色。

请添加图片描述

不同色彩空间的转换

OpenCV中提供的不同空间转换的函数是 cv2.cvtColor( )。

函数原型: dst = cv2.cvtColor(src, code);

dst 为转换后的图像。

参数描述如下:

参数描述
src转换前的初始图像
code色彩空间转换码

色彩空间转换码,如下:

色彩空间转换码含义
cv2.COLOR_BGR2GRAY从BGR色彩空间转换到GRAY色彩空间
cv2.COLOR_RGB2GRAY从RGB色彩空间转换到GRAY色彩空间
cv2.COLOR_BGR2HSV从BGR色彩空间转换到HSV色彩空间
cv2.COLOR_RGB2HSV从RGB色彩空间转换到HSV色彩空间
cv2.COLOR_BGR2BGRA从BGR色彩空间转换到BGRA色彩空间

拆分图像通道

OpenCV 中提供的用于拆分图像通道的函数是 cv2.split()。

函数原型: b,g,r = cv2.split(bgr_image) ; h,s,v = cv2.split(hsv_image) .

b,g,r为查分后对应的B G R通道;h,s,v为拆分后的H S V通道。

参数描述如下:

参数描述
bgr_image一幅BGR图像
hsv_image一幅HSV图像

合并图像通道

OpenCV 中提供的用于合并图像通道的函数是 cv2.merge()。

函数原型: rgb = cv2.merge([r,g,b]) ; hsv = cv2.merge([h,s,v]) .

rgb 为按照 R -> G -> B 的顺序合并通道得到的图像;hsv 为按照 H -> S -> V 的顺序合并通道得到的图像。

参数描述如下:

参数描述
[r,g,b][R通道图像,G通道图像,B通道图像]
[h,s,v][H通道图像,S通道图像,V通道图像]

具体步骤

1. 创建项目结构

创建项目名为图像在不同色彩空间间的转换,项目根目录下新建code文件夹储存代码,新建dataset文件夹储存数据,项目结构如下:

图像在不同色彩空间间的转换                 # 项目名称
├── code                               # 储存代码文件
├── dataset                            # 储存数据文件

注:如项目结构已存在,无需再创建。

2. 将图像由BGR色彩空间转换到HSV色彩空间

  1. code文件夹下创建bgr2hsv.py文件;
  2. 读取dataset文件夹下的daisy.png图片,并进行展示,标题为daisy_bgr
  3. 将图片由BGR色彩空间转换到HSV色彩空间,并进行展示,标题为daisy_hsv
  4. 无限等待用户输入按键,按下按键后销毁所有窗口。

代码实现

# 导入OpenCV
import cv2
# 读取图像
img = cv2.imread('../dataset/daisy.png')
# 展示图像
cv2.imshow("daisy_bgr",img)
# 将图片由BGR色彩空间转换到HSV色彩空间
hsv_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
# 展示图像
cv2.imshow("daisy_hsv",hsv_img)
# 等待用户输入
cv2.waitKey(0)
# 销毁所有窗口
cv2.destroyAllWindows()

请添加图片描述

实验效果

3. 将图像由BGR色彩空间转换到GRAY色彩空间

  1. code文件夹下创建bgr2gray.py文件;
  2. 读取dataset文件夹下的daisy.png图片,并进行展示,标题为daisy_bgr
  3. 将图片由BGR色彩空间转换到GRAY色彩空间,并进行展示,标题为daisy_gray
  4. 无限等待用户输入按键,按下按键后销毁所有窗口。

代码实现

# 导入OpenCV
import cv2
# 读取图像
img = cv2.imread('../dataset/daisy.png')
# 展示图像
cv2.imshow("daisy_bgr",img)
# 将图片由BGR色彩空间转换到gray色彩空间
gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 展示图像
cv2.imshow("daisy_gray",gray_img)
# 等待用户输入
cv2.waitKey(0)
# 销毁所有窗口
cv2.destroyAllWindows()

请添加图片描述

实验效果

4. 拆分图像通道

  1. code文件夹下创建img_split.py文件;
  2. 读取dataset文件夹下的daisy.png图片;
  3. 将图片拆分为3个通道,并以此展示3个通道的图片;
  4. 无限等待用户输入按键,按下按键后销毁所有窗口。
  5. 无限等待用户输入按键,按下按键后销毁所有窗口。

代码实现

# 导入OpenCV
import cv2
# 读取图像
img = cv2.imread('../dataset/daisy.png')
# 将图片拆分为3个通道
b,g,r = cv2.split(img)
# 展示图像
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)
# 等待用户输入
cv2.waitKey(0)
# 销毁所有窗口
cv2.destroyAllWindows()

请添加图片描述

实验效果

OpenCV的 RGB,HSV,GRAY三种颜色空间的操作非常简单,在实际应用的过程中,需要我们知道,每种色彩空间的含义和用途,才能够正确处理图像,得到我们想要的效果。

点击下载源码

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

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

相关文章

雷达中的无源和有源的区别

常规雷达探测目标时,需要源源不断地发射无线电波,所以叫有源雷达( active radar)。有源雷达的优点是能自主搜索目标,因为它接收的是自己发射的电磁波,所以灵敏度高,分辨率好。但这种雷达易受目标的电磁干扰&#xff0c…

chatgpt赋能python:Python:一门强大的编程语言

Python:一门强大的编程语言 Python是一款高级编程语言,以其简单易用和多功能而闻名于世。Python首次发布于1989年,如今已成为许多开发者的首选编程语言。Python特别适合于数据处理、机器学习、人工智能等领域。 为什么选择Python&#xff1…

chatgpt赋能python:PythonWMS:优化仓库管理的新选择

Python WMS: 优化仓库管理的新选择 在现代商业环境中,仓库管理对于公司的供应链管理至关重要。然而,传统的仓库管理系统(WMS)经常过于复杂或桎梏化,不能适应快速变化的市场需求。现在,随着Python WMS的出现…

jQuery-基本过滤器

<!DOCTYPE HTML> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"> <title>基本过滤器</title> <style type"text/css"> …

Ubuntu安装RabbitMQ server - 在外远程访问

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 转载自cpolar内网穿透的文章&#xff1a;无公网IP&…

MyBatis-Plus_04 代码生成器、多数据源(主从)、MyBatisX插件

目录 ①. 代码生成器 ②. 多数据源&#xff08;主从&#xff09; ③. MyBatisX ①. 代码生成器 添加代码生成器依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.1&…

chatgpt赋能python:PythonTika:解析各种格式的文档

Python Tika: 解析各种格式的文档 简介 Python Tika是一个基于Apache Tika的Python库&#xff0c;可以解析各种格式的文档&#xff0c;如PDF、Microsoft Office、OpenOffice、XML、HTML、TXT等等。它提供了一种非常方便的方法来获取文档内容&#xff0c;包括元数据、正文、各…

Vue(Vuex插件)

一、Vuex的介绍 1. 概念 专门在Vue中实现集中式状态数据管理的一个Vue插件&#xff0c;对Vue的应用中多个组件的共享状态进行集中式的管理(读/写)&#xff0c;也是一种组件间通信的方式&#xff0c;且适用于任意组件间通信。 2. 了解vuex地址 https://github.com/vuejs/vuexh…

BLIP-2:salesforce提出基于冻结视觉编码器和LLM模型参数的高效训练多模态大模型

论文链接&#xff1a;https://arxiv.org/abs/2301.12597 项目代码&#xff1a;https://github.com/salesforce/LAVIS/tree/main/projects/blip2 体验地址&#xff1a;https://huggingface.co/spaces/Salesforce/BLIP2 文档介绍&#xff1a;https://huggingface.co/docs/tran…

浅谈数据中心供配电设计应用以及监控产品选型

摘 要&#xff1a;近年来&#xff0c;随着数据中心的迅猛发展&#xff0c;数据中心的能耗问题也越来越突出&#xff0c;有关数据中心的能源管理和供配电设计已经成为热门问题&#xff0c;合理可靠的数据中心配电系统方案&#xff0c;是提高数据中心电能使用效率&#xff0c;降低…

图片翻译怎么弄?如何把图片翻译成中文?

在使用社交媒体时&#xff0c;可能会遇到来自世界各地的异文化信息&#xff0c;这时我们可以借助图片翻译的方法帮助我们更好地了解这些信息&#xff0c;促进跨文化交流。那么图片翻译怎么弄呢&#xff1f;图片翻译的方法有哪些呢&#xff1f;这篇文章给你推荐三个非常好用的图…

深入理解Java虚拟机:JVM高级特性与最佳实践-总结-11

深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践-总结-11 Java内存模型与线程概述硬件的效率与一致性Java内存模型主内存与工作内存内存间交互操作 Java内存模型与线程 概述 多任务处理在现代计算机操作系统中几乎已是一项必备的功能了。在许多场景下&#xff0c;让计算…

22WPF----Prism框架

1.关于Prism框架 官网&#xff1a;Prism Library 文档可以参考 源码地址&#xff1a;https://github.com/PrismLibrary/Prism 版本8.1 Prism框架10历史、微软&#xff0c;最新版本使用 2、功能说明 Prism提供了一组设计模式的实现&#xff0c;有助于编写结构良好的且可维…

JavaScript for与forEach结束本轮循环/结束循环

文章目录 前言一、for1.终止当前轮次2.终止循环 二、forEach1.终止当前轮次2.终止循环 总结 前言 我以前一直想尝试一下这个for里嵌switch来着, 找不到合适的机会, 今天写node脚本刚好遇到, 必须狠狠的尝试一下. 一、for 1.终止当前轮次 我先把正确写法放在这里, 如果循环没…

chatgpt赋能python:Python:一个多才多艺的编程语言

Python: 一个多才多艺的编程语言 作为一名有10年 Python 编程经验的工程师&#xff0c;我必须坦言&#xff0c;Python 是我最喜欢的编程语言之一。Python 简单易学&#xff0c;语法简洁&#xff0c;非常适合开发 Web 应用程序、数据分析、人工智能、自然语言处理等方面。 Pyt…

抖音账号矩阵系统源码开发之——视频发布功能开发

视频发布权限在账号矩阵系统研发之初&#xff0c;都是一个备受争议的功能&#xff0c;最早之前我们使用的视频发布权限名字是Video.creat, video.delete权限&#xff0c;但是该权限于2022年10月份做了权限的收回&#xff0c;后又在上架了一个能力叫发布内容至抖音&#xff1a;…

chatgpt赋能Python-python_theano

简介 什么是Python? Python是一种高层次、动态、解释型编程语言。它是一个易于学习且功能强大的语言&#xff0c;拥有广泛的应用领域。Python是由Guido van Rossum于1989年发明和开发的。它的设计哲学强调代码的可读性和简洁性&#xff0c;在保持语言的清晰和简洁性时&#…

chatgpt赋能python:PythonUDF-知道这些你就能轻松实现自己的需求

Python UDF - 知道这些你就能轻松实现自己的需求 如果你是一名Python开发者&#xff0c;你肯定知道Python的强大和适用性。在数据分析、机器学习和Web应用程序等领域&#xff0c;Python的使用已经成为了常态。Python的一个重要特点是拥有大量的库和框架&#xff0c;这些库和框…

C Primer Plus第四章编程练习答案

学完C语言之后&#xff0c;我就去阅读《C Primer Plus》这本经典的C语言书籍&#xff0c;对每一章的编程练习题都做了相关的解答&#xff0c;仅仅代表着我个人的解答思路&#xff0c;如有错误&#xff0c;请各位大佬帮忙点出&#xff01; 1.编写一个程序&#xff0c;提示用户输…