python学opencv|读取图像(十二)BGR图像转HSV图像

【1】引言

前述已经学习了opencv中图像BGR相关知识,文章链接包括且不限于下述:

python学opencv|读取图像(六)读取图像像素RGB值_opencv读取灰度图-CSDN博客

python学opencv|读取图像(七)抓取像素数据顺利修改图像大小-CSDN博客

python学opencv|读取图像(九)用numpy创建黑白相间灰度图-CSDN博客

python学opencv|读取图像(十)用numpy创建彩色图像-CSDN博客

python学opencv|读取图像(十一)彩色图像转灰度图的两种办法-CSDN博客

在这里,我们了解奥,BGR是每个像素点上的颜色构成。

对于灰度图,只有一个通道,获取BGR值只会得到一个数据;对于彩色图,由三个通道,获取BGR值将会得到三个数据。

但对于图像的表达,还有一种控制颜色的方式是调整图像的色调(Hue)、饱和度(Saturation)和亮度(Value)。色调、饱和度和亮度合起来简称为HSV。

关于色调、饱和度和亮度的百度百科解释链接为:HSV颜色模型_百度百科。

【2】官网教程

在opencv的官网,提供了BGR和HSV的互相转化说明,链接如下:

OpenCV: Color conversions

官网提供的转化公式没有详细的来源,但如果只进行应用的话,即使不是很能读懂官网文档也不影响对代码的使用。所以,我们直接大胆尝试。

【3】BGR转HSV图

我们按照已经熟悉的方式,先引入模块,然后读图片、之后调整和显示图片,最后保存图片的工作流程,在pycharm等编辑器中输入下述代码:

import cv2 as cv #引入cv2模块
import numpy as np

image=cv.imread("cv-BGR.png") #读取图片,将其转化为灰度图
if image is not None: #成功读取图片
    cv.imshow('cvtest', image)  # 显示为彩色图

    hsv_image=cv.cvtColor(image,cv.COLOR_BGR2HSV) #BGR和HSV转化  
    image_h=np.hstack((image,hsv_image)) #BGR和HSV图像拼接
    cv.imshow('hcvtest', image_h)  # 显示为拼接图
    cv.imwrite('opencv-HSV-001.jpg', hsv_image) #保存HSV图
    
    cv.waitKey()  # 图片显示时间
    cv.destroyAllWindows()  # 释放所有窗口
else: #未找到图片
    print("Error: 图片无法加载")

在这里,我们会发现和之前不同的主要是中间代码段:

hsv_image=cv.cvtColor(image,cv.COLOR_BGR2HSV) #BGR和HSV转化
image_h=np.hstack((image,hsv_image)) #BGR和HSV图像拼接
cv.imshow('hcvtest', image_h)  # 显示为拼接图
cv.imwrite('opencv-HSV-001.jpg', hsv_image) #保存HSV图

 这里首先调用cvtColor()函数,让BGR图和HSV图进行了转化;

然后使用了np.hstack()函数,将BGR图和HSV图横向拼接在了一起;

之后就比较简单,显示拼接图和保存HSV图。

代码使用的原图为:

图1 BGR图

代码运行后,获得的拼接图像为:

图2(左BGR,右HSV)

显然,在直接转化的条件下,HSV图像可能会失真。

【4】HSV转BGR图

将代码稍加修改,在cvtColor()函数中,将cv.COLOR_BGR2HSV更新为cv.COLOR_HSV2BGR,实现HSV图转BGR图。

使用之前获得的HSV图作为原图:

图3 HSV图

运行代码后,获得的图像为:

图4 (左HSV,右BGR)

显然HSV转回BGR发生了新的失真情况。

为追溯,把第3章中的HSV图保存为png形式:

图5 HSV图png格式

然后再度将HSV图转化为BGR:

图6 (左HSV,右BGR)-原图png格式

由图6可见,使用png格式作为原图,HSV转BGR看起来会好一些。

【5】总结

探索了python+opencv实现BGR图和HSV图的互相转化。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于 mzt-biz-log 实现接口调用日志记录

🎯导读:mzt-biz-log 是一个用于记录操作日志的通用组件,旨在追踪系统中“谁”在“何时”对“何事”执行了“何种操作”。该组件通过简单的注解配置,如 LogRecord,即可实现接口调用的日志记录,支持成功与失败…

如何在繁忙的生活中找到自己的节奏?

目录 一、理解生活节奏的重要性 二、分析当前生活节奏 1. 时间分配 2. 心理状态 3. 身体状况 4. 生活习惯 1. 快慢适中 2. 张弛结合 3. 与目标相符 三、掌握调整生活节奏的策略 1. 设定优先级 2. 合理规划时间 3. 学会拒绝与取舍 4. 保持健康的生活方式 5. 留出…

Docker:目录挂载、数据卷(补充二)

Docker:目录挂载、数据卷 1. 挂载2. 卷映射 1. 挂载 -v /app/nghtml:/usr/share/nginx/html /app/nghtml 是外部主机的地址 /usr/share/nginx/html 是内部容器的地址这里启动一个nginx,然后在后台运行时其命令为 (base) ➜ ~ docker run -d -p 80:80 …

新能源汽车大屏可视化第三次数据存储

任务: 将数据存放到temp.csv 链接: 1.排行页面 https://www.dongchedi.com/sales 2.参数页面 https://www.dongchedi.com/auto/params-carIds-x-9824 完善打印: 1. [{‘series_id’: 5952, ‘series_name’: ‘海鸥’, ‘image’: ‘https://…

Three.js资源-模型下载网站

在使用 Three.js 进行 3D 开发时,拥有丰富的模型资源库可以大大提升开发效率和作品质量。以下是一些推荐的 Three.js 模型下载网站,它们提供了各种类型的 3D 模型,适合不同项目需求。无论你是需要逼真的建筑模型,还是简单的几何体…

无人机故障安全模式设计逻辑与技术!

一、设计逻辑 故障检测与识别: 无人机系统需具备实时监测各项关键参数的能力,如电池电量、电机状态、传感器数据等。 当检测到参数异常或超出预设阈值时,系统应能迅速识别故障类型及其严重程度。 故障处理策略: 根据故障类型…

洞察:OpenAI 全球宕机,企业应该如何应对 LLM 的不稳定性?

北京时间12月12日上午,OpenAI证实其聊天机器人ChatGPT正经历全球范围的宕机,ChatGPT、Sora及API受到影响。 OpenAI 更新事故报告称,已查明宕机原因,正努力以最快速度恢复正常服务,并对宕机表示歉意。 此次 OpenAI 故障…

STM32F407ZGT6-UCOSIII笔记2:UCOSIII任务创建实验-Printf 函数卡住 UCOSIII 系统问题解决

今日简单编写熟悉一下UCOSIII系统的任务创建代码,理解一下OS系统: 并发现以及解决了 Printf 函数卡住 UCOSIII 系统问题解决 文章提供测试代码讲解、完整工程下载、测试效果图 目录 文件结构解释: 任务函数文件: 目前各个文件任…

CUDA从入门到精通(三)——CUDA编程示例

CUDA 编程简介 CUDA(Compute Unified Device Architecture)是由 NVIDIA 提供的一种并行计算平台和编程模型。它允许开发者利用 NVIDIA GPU 的并行计算能力,编写可以在 GPU 上高效运行的代码,从而加速计算密集型任务。 CUDA 通过…

【十进制整数转换为其他进制数——短除形式的贪心算法】

之前写过一篇用贪心算法计算十进制转换二进制的方法,详见:用贪心算法计算十进制数转二进制数(整数部分)_短除法求二进制-CSDN博客 经过一段时间的研究,本人又发现两个规律: 1、不仅仅十进制整数转二进制可…

舵机SG90详解

舵机,也叫伺服电机,在嵌入式开发中,舵机作为一种常见的运动控制组件,具有广泛的应用。其中,SG90 舵机以其高效、稳定的性能特点,成为了许多工程师和爱好者的首选,无论是航模、云台、机器人、智能…

如何为IntelliJ IDEA配置JVM参数

在使用IntelliJ IDEA进行Java开发时,合理配置JVM参数对于优化项目性能和资源管理至关重要。IntelliJ IDEA提供了两种方便的方式来设置JVM参数,以确保你的应用程序能够在最佳状态下运行。本文将详细介绍这两种方法:通过工具栏编辑配置和通过服…

跌倒数据集,5345张图片, 使用yolo,coco json,voc xml格式进行标注,平均识别率99.5%以上

跌倒数据集,5345张图片, 使用yolo,coco json,voc xml格式进行标注,平均识别率99.5%以上 ,可用于某些场景下识别人是否跌倒或摔倒并进行告警。 数据集分割 训练组99% 5313图片 有效集0&am…

nods.js之nrm安装及使用

nods.js之nrm安装及使用 一、简介二、安装 nrm与使用三、报错解决 一、简介 nrm 是 Node.js 的一个工具,用于管理和切换 npm 源(Registry)。它使得在不同的 npm 镜像源之间切换变得非常容易,尤其对于那些经常因为网络问题或速度原…

selenium自动化测试基础知识

目录 一、概念知识 (一)三大核心组件 (二)Selenium 自动化测试的工作原理 (三)Selenium 支持的操作 (四)Selenium 自动化测试的优点 (五)Selenium 自动化测试的缺点 (六)Selenium 自动化测试的应用场景 总结 二、实操例子 使用前提--安装步骤 注意事项 (一)浏览器的…

Cisco Packet Tarcer配置计网实验笔记

文章目录 概要整体架构流程网络设备互连基础拓扑图拓扑说明配置步骤 RIP/OSPF混合路由拓扑图拓扑说明配置步骤 BGP协议拓扑图拓扑说明配置步骤 ACL访问控制拓扑图拓扑说明配置步骤 HSRP冗余网关拓扑图拓扑说明配置步骤 小结 概要 一些环境配置笔记 整体架构流程 网络设备互连…

RNN LSTM Seq2Seq Attention

非端到端: data -》 cleaning -》 feature Engining (70%-80%工作 设计特征)-》 分类器 -》预测 端到端 End-to-End: data -》 cleaning -》Deep learning(表示学习,从数据中学习特征) -》…

【AI日记】24.12.17 kaggle 比赛 2-6 | 把做饭看成一种游戏 | 咖喱牛肉

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加:kaggle 比赛 Regression with an Insurance Dataset时间:9 小时睡得好很重要 读书 书名:富兰克林自传时间:0.5 小时阅读原因:100 美元纸…

电脑为什么会提示“msvcr120.dll缺失”?“找不到msvcr120.dll文件”要怎么解决?

电脑故障排查指南:揭秘“msvcr120.dll缺失”的真相与解决方案 在软件开发与日常维护的广阔天地里,遇到系统报错或文件缺失的情况可谓家常便饭。今天,我将带领大家深入探讨一个常见的系统提示——“msvcr120.dll缺失”,并揭秘其背…

Kotlin复习

一、Kotlin类型 1.整数 2.浮点 显示转换: 所有数字类型都支持转换为其他类型,但是转换前会检测长度。 toByte(): Byte toShort(): Short toInt(): Int toLong(): Long toFloat(): Float toDouble(): Double 不同进制的数字表示方法(为了提高…