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

news2024/12/14 7:55:08

【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图的互相转化。

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

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

相关文章

Linux(网络协议和管理)

后面也会持续更新,学到新东西会在其中补充。 建议按顺序食用,欢迎批评或者交流! 缺什么东西欢迎评论!我都会及时修改的! 在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频 王晓春老师的个人空间…

代码随想录训练营第十七天| 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

654.最大二叉树 题目链接/文章讲解: 代码随想录 视频讲解:又是构造二叉树,又有很多坑!| LeetCode:654.最大二叉树_哔哩哔哩_bilibili 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子…

ISP(Image Signal Processor)——HDR技术总结

传统多帧融合技术 拍摄一系列不同曝光时长的图像帧(LDR),然后使用融合算法进行融合成HDR图像。 融合算法可以分为两种 基于照度图估计的融合 基于照度估计需要拟合相机响应函数,详细可以参考如下论文: Recovering H…

【理想汽车中科院】基于模仿学习的端到端自动驾驶数据缩放规律

论文: https://arxiv.org/pdf/2412.02689 项目: https://github.com/ucaszyp/Driving-Scaling-Law 0. 摘要 端到端自动驾驶范式因其可扩展性而最近吸引了大量关注。然而,现有方法受到现实世界数据规模有限的制约,这阻碍了对端到端自动驾驶相关扩展规律…

程序的调试

一名优秀的程序员也是一名出色的侦探,每一次调试都是尝试破案的过程 前言 一、什么是调试? 二、调试 1.调试是什么 2.基本步骤 三、调试注意事项 1.怎么写出易于调试的代码 2.常见错误 总结 前言 主要是怎么调试,调试的注意事项&#xff0c…

Linux内核移植之内核简介

学到本章节,大家应该对Linux操作系统都有了一定的了解,但可能还不知道我们拿到手的内核源码都经历了什么。 linux有一个庞大的开源社区,每个人都可以向开源社区提交代码。由于linux内核十分庞大所以每个模块都有对应的维护人员。维护人员的工…

2024年鄂州初级、中级职称公示了

本次鄂州市工程、中职教师、技工学校教师、档案、农业、新闻、艺术、群文、文博等专业中级和初级职称公示了,通过共有371人,公示时间为2024年12月9日至2024年12月13日。 本次公示工程类中级职称人员有210人通过评审,助理职称有35人通过评审。…

node_modules文件夹删除失败解决办法

在前端开发过程中,node_modules 文件夹是一个必不可少的组成部分,里面存放着项目所需的各种依赖包。然而,随着项目的发展,node_modules 文件夹可能会变得异常庞大,甚至有时需要删除它来解决一些依赖冲突或清理空间。但…

【合作原创】使用Termux搭建可以使用的生产力环境(六)

前言 在上一篇【合作原创】使用Termux搭建可以使用的生产力环境(五)-CSDN博客我们讲到了如何美化xfce4桌面,达到类似于Windows的效果,这一篇将继续在上一篇桌面的基础上给我们的系统装上必要的软件,让它做到真正可以使…

40 list类 模拟实现

目录 一、list类简介 (一)概念 (二)list与string和vector的区别 二、list类使用 (一)构造函数 (二)迭代器 (三)list capacity (四&#x…

小程序开发常见问题

一、开发方案选择 1.小程序原生开发:需要live-player组件资质,对开发者的资质要求较高,开发难度较大; 2.小程序内嵌H5:因校验文档上限,目前平台已经不支持配置校验文件; 3.半屏小程序&#xff1…

02. Docker:安装和操作

目录 一、Docker的安装方式 1、实验环境准备 1.1 关闭防火墙 1.2 可以访问网络 1.3 配置yum源 2、yum安装docker 2.1 安装docker服务 2.2 配置镜像加速 2.3 启动docker服务 3、二进制安装docker 3.1 下载或上传安装包并解压 3.2 配置使用systemctl管理 3.3 配置镜像…

uniapp 开发小程序 准备工作

前言: 在本地使用vue2.0 实现网页版拍照功能,本地开发老是报错 NotFoundError: Requested device not found ,原因是 浏览器主要用于处理网络协议(如 HTTP、HTTPS)相关的数据交互,它的运行环境被设计为相对…

vue3 封装request请求

vue3 原生请求封装 我这里用一个案例来解释 需求:把vue3原生的静态页 集成到 vue2 的若依项目 并且可以访问 vue2接口 在vue3 src 下的 utils 下 创建文件request.ts文件 import axios from "axios"; import { showMessage } from "./status"; // 引入状态…

Java安全—SpringBootActuator监控泄露Swagger自动化

前言 今天依旧是SpringBoot框架,估计还要一篇文章才能把它写完,没办法,Java安全的内容太多了。 Actuator SpringBoot Actuator模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP跟踪…

质数的和与积

质数的和与积 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 两个质数的和是S,它们的积最大是多少? 输入 一个不大于10000的正整数S,为两个质数的和。 输出 一个整…

如何用VScode恢复误删文件-linux

如果你用vscode远程在服务器上办公,有一天你用了: rm -rf *然后你发现你的文件不见了,不要着急。 这种方法只适用于不多的几个文件。 这个时候你要做的是,查看右侧的1: 从1里面查找你删除的文件,然后点…

Linux文件操作基础

1.引入 在Linux第一章提到过, 在Linux中,一切皆文件,而文件由文件内容和文件属性组成,在C语言中可以 使用相应的接口打开文件,例如 fopen 函数 文件最开始在磁盘中,但是因为磁盘的速度远低于CPU的执行速度…

如何在 MacOS 上安装 Flutter ?

Flutter 是 Google 开发的一个功能强大的框架,它允许开发人员从单个代码库构建高质量的、本机编译的移动、web 和桌面应用程序。如果你是初次接触 Flutter,并希望在你的 macOS 系统上安装它,本指南将引导你一步一步地完成这个过程。 Step 1:…

【2025最新计算机毕业设计】基于SpringBoot+Vue社区医院挂号健康服务平台【提供源码+答辩PPT+文档+项目部署】

作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…