当前位置: 首页 > news >正文

python学opencv|读取图像(十三)BGR图像和HSV图像互相转换深入

【1】引言

前序学习过程中,我们偶然发现:如果原始图像是png格式,将其从BGR转向HSV,再从HSV转回BGR后,图像的效果要好于JPG格式。

文章链接为:

python学opencv|读取图像(十二)BGR图像转HSV图像-CSDN博客

但之前“BGR转向HSV,再从HSV转回BGR”的过程分别写了两个程序。

在此实践基础上,我们尝试在同一个程序内部实现BGR-HSV-BGR的闭环转换。

【2】代码编写

在前述文章的基础上,我们在pycharm等编辑器输入下述代码:

import cv2 as cv  # 引入cv2模块
import numpy as npimage = cv.imread("cv-BGR-000.png")  # 读取图片
if image is not None:  # 成功读取图片cv.imshow('cvtest', image)  # 显示为彩色图# BGR向HSV转化hsv_image = cv.cvtColor(image, cv.COLOR_BGR2HSV)  # BGR和HSV转化image_bh = np.hstack((image, hsv_image))  # BGR和HSV图像拼接cv.imshow('hcvtest', image_bh)  # 显示为拼接图cv.imwrite('cv-BGRTOHSV-001.png', hsv_image)  # 保存HSV图cv.imwrite('cv-BGRTOHSV-002.png', image_bh)  # 保存BGR和HSV图像拼接# HSV向BGR转化bgr_image=cv.cvtColor(hsv_image, cv.COLOR_HSV2BGR)  # BGR和HSV转化image_hb = np.hstack((hsv_image, bgr_image))  # BGR和HSV图像拼接cv.imshow('bgrtest', image_hb)  # 显示为拼接图cv.imwrite('cv-HSVTOBGR-001.png', bgr_image)  # 保存BGR图cv.imwrite('cv-HSVTOBGR-002.png', image_hb)  # 保存BGR和HSV图像拼接cv.waitKey()  # 图片显示时间cv.destroyAllWindows()  # 释放所有窗口
else:  # 未找到图片print("Error: 图片无法加载")

代码看起来很长,但实际上可以大致分为三个模块:

第一个模块引入cv2和numpy模块;

第二个模块包括两部分,第一部分实现BGR向HSV转换,第二部分实现HSV向BGR转换;

第三个模块释放所有对象。

【3】代码测试

运行代码前,我们准备的原始图像cv-BGR-000.png为:

图1 cv-BGR-000.png

运行代码后,获得的BGR转HSV图为cv-BGRTOHSV-001.png。

cv-BGRTOHSV-001.png和原cv-BGR-000.png对比效果为:

图2 cv-BGR-000.png和cv-BGRTOHSV-001.png对比

显然,在BGR转向HSV图像后,HSV图像似乎染上了很多红晕。

代码继续运行,获得的HSV转回的BGR图为cv-HSVTOBGR-001.png。

cv-HSVTOBGR-001.png和原cv-BGRTOHSV-001.png对比效果为:

图3 cv-BGRTOHSV-001和cv-HSVTOBGR-001.png对比

此时我们发现:由HSV转回BGR后的图像,似乎和原图完全一致。

【4】图像对比

为实现上述猜想,于是继续增添代码,将BGR-HSV-BGR的图像和原图进行对比:

# HSV向BGR转化后和原图对比
image_bhb = np.hstack((image, bgr_image))  # HSV转回BGR图像和原图拼接
cv.imshow('bgrhsvbgrtest', image_bhb)  # 显示为拼接图
cv.imwrite('cv-BGRTOHSVTOBGR.png', image_bhb)  # 保存BGR图

代码运行后的效果为:

图4 cv-BGRTOHSVTOBGR.png

由图4可见,基于png格式图像的BGR-HSV-BGR的闭环转换,图像几乎是无损的回到了原来的模样。

此时我们还会发现,转回的新图比原图还大:

图5 转回的新图比原图还大

上述发现有助于大家在实际工作生活中进行灵活转换图像。

此时的完整代码为:

import cv2 as cv  # 引入cv2模块
import numpy as npimage = cv.imread("cv-BGR-000.png")  # 读取图片
if image is not None:  # 成功读取图片cv.imshow('cvtest', image)  # 显示为彩色图# BGR向HSV转化hsv_image = cv.cvtColor(image, cv.COLOR_BGR2HSV)  # BGR和HSV转化image_bh = np.hstack((image, hsv_image))  # BGR和HSV图像拼接cv.imshow('hcvtest', image_bh)  # 显示为拼接图cv.imwrite('cv-BGRTOHSV-001.png', hsv_image)  # 保存HSV图cv.imwrite('cv-BGRTOHSV-002.png', image_bh)  # 保存BGR和HSV图像拼接# HSV向BGR转化bgr_image=cv.cvtColor(hsv_image, cv.COLOR_HSV2BGR)  # BGR和HSV转化image_hb = np.hstack((hsv_image, bgr_image))  # BGR和HSV图像拼接cv.imshow('bgrtest', image_hb)  # 显示为拼接图cv.imwrite('cv-HSVTOBGR-001.png', bgr_image)  # 保存BGR图cv.imwrite('cv-HSVTOBGR-002.png', image_hb)  # 保存BGR和HSV图像拼接# HSV向BGR转化后和原图对比image_bhb = np.hstack((image, bgr_image))  # HSV转回BGR图像和原图拼接cv.imshow('bgrhsvbgrtest', image_bhb)  # 显示为拼接图cv.imwrite('cv-BGRTOHSVTOBGR.png', image_bhb)  # 保存BGR图cv.waitKey()  # 图片显示时间cv.destroyAllWindows()  # 释放所有窗口
else:  # 未找到图片print("Error: 图片无法加载")

 【5】总结

探索了png格式的图像,进行BGR-HSV-BGR格式比转换后的对比,发现新图比原图质量更高。

 

相关文章:

python学opencv|读取图像(十三)BGR图像和HSV图像互相转换深入

【1】引言 前序学习过程中,我们偶然发现:如果原始图像是png格式,将其从BGR转向HSV,再从HSV转回BGR后,图像的效果要好于JPG格式。 文章链接为: python学opencv|读取图像(十二)BGR图…...

【鸿蒙实战开发】数据的下拉刷新与上拉加载

本章介绍 本章主要介绍 ArkUI 开发中最常用的场景下拉刷新, 上拉加载,在本章中介绍的内容在实际开发过程当中会高频的使用,所以同学们要牢记本章的内容。下面就让我们开始今天的讲解吧! List 组件 在 ArkUI 中List容器组件也可以实现数据滚动的效果&a…...

面向对象设计规则和各类设计模式

面向对象设计(Object-Oriented Design, OOD)是一种软件设计方法论,它使用对象、类、继承、封装、多态等概念来组织代码。面向对象设计的核心目标是提高软件的可维护性、可扩展性和复用性。在面向对象设计中,遵循一定的设计原则和模…...

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(六)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(六) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…...

利用Docker分层构建优化镜像大小

合适docker镜像文件大小不仅影响容器启动效率,也影响资源占用效率。本文介绍如何利用分层方式构建docker镜像,采用多种方式避免镜像文件太大而影响性能。 Docker 镜像大小优化的重要性 资源利用效率 较小的镜像文件在存储和传输过程中占用更少的空间和带…...

Spring 魔法探秘:从 Bean 线程安全到事务魔法全解析

1.Spring 框架中的单例 Bean 是线程安全的么? Spring 框架中的单例 Bean 本身并不保证线程安全性。单例模式意味着在整个应用程序的生命周期中,只会创建该 Bean 的一个实例,并且所有对该 Bean 的请求都将共享这个实例。 线程安全与否取决于…...

[Maven]IDEA父工程创建子工程后父工程不可运行

IDEA在使用maven构建项目时,如果你在当前工程下创建一个子工程,那么原有的工程(变为父工程的工程)原有的代码通常会变得不可运行。 这是因为,使用maven创建父子工程关系后,IDEA会自动变更项目的模块相关配置。 比如这是我maven工程…...

【系统移植】在开发板上加载内核和根文件系统的三种方法

实现环境:ubuntu24.04和FS4412实验平台。 要在开发板上运行linux操作系统,首先要将linux内核镜像(uImage)、设备树(dexynos4412-fs4412.dtb)和根文件系统镜像(ramdisk.img)加载到开发板内存。有以下几种方式加载: 一、通过tftp加载内核和根文件系统 二、通过EMMC加…...

#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍02-基于错误消息的SQL注入(Error-Based SQL Injection)

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...

数据结构-排序(来自于王道)

排序的基本概念 插入排序 在这个算法中,除了输入的数组本身,没有使用额外的数据结构来存储数据,所有的操作都是在原数组上进行的。因此,无论输入数组的大小 n 是多少,算法执行过程中所占用的额外空间是固定的&#xff…...

【蓝桥杯选拔赛真题93】Scratch青蛙过河 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 Scratch青蛙过河 一、题目要求 编程实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、python资料 Scr…...

ReactPress最佳实践—搭建导航网站实战

Github项目地址:https://github.com/fecommunity/easy-blog 欢迎Star。 近期,阮一峰在科技爱好者周刊第 325 期中推荐了一款开源工具——ReactPress,ReactPress一个基于 Next.js 的博客和 CMS 系统,可查看 demo站点。(…...

Hive-4.0.1数据库搭建(可选配置用户名密码远程连接)

1.官网下载tar包上传到服务器并解压&#xff08;我这里解压到了hive目录): 2.进入到conf目录&#xff0c;并复制模板配置文件进行修改&#xff1a; cd /apache-hive-4.0.1-bin/conf cp hive-default.xml.template hive-site.xml3.编写内容如下&#xff1a; <property>&…...

P8772 求和 P8716 回文日期

文章目录 [蓝桥杯 2022 省 A] 求和[蓝桥杯 2020 省 AB2] 回文日期 [蓝桥杯 2022 省 A] 求和 题目描述 给定 n n n 个整数 a 1 , a 2 , ⋯ , a n a_{1}, a_{2}, \cdots, a_{n} a1​,a2​,⋯,an​, 求它们两两相乘再相加的和&#xff0c;即 S a 1 ⋅ a 2 a 1 ⋅ a 3 ⋯ a…...

MySQL迁移SQLite

将 MySQL 的表结构和数据迁移到 SQLite&#xff0c;可以通过以下步骤实现。这个过程主要包括导出 MySQL 数据库到 SQL 文件&#xff0c;然后将其导入到 SQLite 数据库中。 步骤 1: 导出 MySQL 数据库 首先&#xff0c;需要将 MySQL 数据库导出为一个 SQL 文件。可以使用 mysq…...

RocketMQ中的顺序消息和乱序消息详解

内容编辑中… 1.背景 顺序消息是消息队列 RocketMQ 提供的一种高级消息类型。 对于一个指定的Topic,消息严格按照先进先出(FIFO)的原则进行消息发布和消费。 即先发送的消息先消费,后发送的消息后消费。 顺序消息在发送、存储和投递的处理过程中,强调多条消息间的先后…...

Unity UGUI图片循环列表插件

效果展示&#xff1a; 下载链接&#xff1a;https://gf.bilibili.com/item/detail/1111843026 概述&#xff1a; LoopListView2 是一个与 UGUI ScrollRect 相同的游戏对象的组件。它可以帮助 UGUI ScrollRect 以高效率和节省内存的方式支持任意数量的项目。 对于具有10,000个…...

Kafka系列教程 - Kafka 生产者 -2

1. 生产者简介 不管是把 Kafka 作为消息队列系统、还是数据存储平台&#xff0c;总是需要一个可以向 Kafka 写入数据的生产者和一个可以从 Kafka 读取数据的消费者&#xff0c;或者是一个兼具两种角色的应用程序。 使用 Kafka 的场景很多&#xff0c;诉求也各有不同&#xff…...

AI Chat API 对接说明

AI Chat API 对接说明 我们知道&#xff0c;市面上一些问答 API 的对接还是相对没那么容易的&#xff0c;比如说 OpenAI 的 Chat Completions API&#xff0c;它有一个 messages 字段&#xff0c;如果要完成连续对话&#xff0c;需要我们把所有的上下文历史全部传递&#xff0…...

Thread线程基础使用

多线程目的&#xff1a;其实就是希望“并行”执行多任务&#xff0c;提升效率。 单核多线程基于时间片轮询 并发而非并行 线程最大数等于cpu核心数为佳 namespace thinger.ThreadDemo {class Program{//主线程static void Main(string[] args){Console.WriteLine("这个…...

OpenClaw飞书机器人配置:Qwen3.5-9B-AWQ-4bit对话触发图片分析

OpenClaw飞书机器人配置&#xff1a;Qwen3.5-9B-AWQ-4bit对话触发图片分析 1. 为什么选择OpenClaw飞书Qwen3.5组合&#xff1f; 去年我负责一个小型研发团队的知识管理时&#xff0c;发现成员们经常在飞书群聊里分享截图和技术文档照片&#xff0c;但后续讨论需要手动输入大量…...

深入解析MiniAGI:如何用GPT-4构建自主决策智能体系统

深入解析MiniAGI&#xff1a;如何用GPT-4构建自主决策智能体系统 【免费下载链接】mini-agi MiniAGI is a minimal general-purpose autonomous agent based on GPT-3.5 / GPT-4. Can analyze stock prices, perform network security tests, create art, and order pizza. 项…...

python statistics

# Python statistics模块&#xff1a;一个被低估的数据分析工具 很多人第一次接触Python数据分析时&#xff0c;往往会直奔pandas或numpy而去&#xff0c;这当然没错。但有时候&#xff0c;我们需要的只是简单的统计计算&#xff0c;比如算个平均数、中位数&#xff0c;或者看看…...

CW32L012/F030灵眸X1智能小车--电机调速控制

1.认识PWM PWM&#xff08;Pulse Width Modulation脉宽调制&#xff09;是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用&#xff0c;方波占空比被调制用来对一个具体模拟信号的电平…...

个人情况随笔

自我介绍技术世界的探索者&#xff0c;一名对代码充满热情的初学者。虽然起步较晚&#xff0c;但始终相信编程是解决问题的艺术&#xff0c;而不仅仅是敲键盘。过往的经历或许与技术无关&#xff0c;但逻辑分析、团队协作和持续学习的能力&#xff0c;是无论哪个领域都通用的财…...

djjxxvhxbzxhzh

一、OpenAI 1.OpenAI是什么简单来说&#xff0c;OpenAI 大模型 是由美国人工智能公司 OpenAI 开发的一系列大型语言模型&#xff08;LLMs&#xff09; 。你可以把它们想象成拥有巨大“知识储备”和“学习能力”的超级大脑&#xff0c;它们被训练用来理解和生成人类语言&#xf…...

算法解析 | 深入EGO Planner:无ESDF的实时避障与轨迹优化

1. EGO Planner的核心创新&#xff1a;告别ESDF的实时避障革命 第一次接触EGO Planner时&#xff0c;最让我惊讶的是它居然完全抛弃了传统路径规划中视为"标配"的ESDF&#xff08;欧几里得符号距离场&#xff09;。这就像看到有人不用GPS导航&#xff0c;仅凭直觉就能…...

CNVD通用型漏洞挖掘思路,平台漏洞列表一眼定睛法!网络安全挖漏洞零基础入门到精通教程!

有一种艺术叫做&#xff0c;我只需看一眼就能一眼定睛其实最有效率挖cnvd的方法是在于平台本身公布出的漏洞,因为绝对不止一个漏洞这里比如我们看web应用(其他类型都可以看看)一般我们看第一页的漏洞信息就够的了,这里我们点最新的那个KingPortal开发系统存在弱口令,很好,继续挖…...

2026年降AI工具出结果格式乱了怎么处理:格式修复完整方案

2026年降AI工具出结果格式乱了怎么处理&#xff1a;格式修复完整方案 提交前三小时查了AI率&#xff0c;82%。 当时脑子嗡的一声。冷静下来开始查资料找方法&#xff0c;前后折腾了大半天&#xff0c;最后靠嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;救回来了&…...

WarcraftHelper:让经典魔兽争霸3重获现代游戏体验的兼容性增强工具

WarcraftHelper&#xff1a;让经典魔兽争霸3重获现代游戏体验的兼容性增强工具 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸3作为一款经典…...