Python RGB空间到HSI空间转换_python cv rgb转his_盐水鱼的博客-程序员宅基地

技术标签: CV  cv  

参考了网上不少RGB到HSI转换代码
https://blog.csdn.net/qq_38328871/article/details/85060459
https://blog.csdn.net/qq_30091945/article/details/78236347
https://blog.csdn.net/lwplwf/article/details/77494072
但直接跑起来,效率比较低,原因是用了循环。毕竟是Python,效率不能和C/C++相比。用numpy数组计算效率提高很多。公式参考其他博客,这里不写了,直接贴代码

import numpy as np
import tifffile
import cv2
from matplotlib import pyplot as plt


def Normalize(band):

    res = (band - np.min(band)) / (np.max(band) - np.min(band))
    
    return res


def rgb2hsi_np(R, G, B):
    # 波段归一化
    B = Normalize(B)
    G = Normalize(G)
    R = Normalize(R)

    rows = B.shape[0]
    cols = B.shape[1]

    H = np.zeros((rows, cols))  #H通道
    I = (R + G + B) / 3.0       #I通道
    S = np.zeros((rows, cols))  #S通道

    den = np.sqrt((R-G)**2 + (R-B)*(G-B))
    thetha = np.arccos(0.5*(R-B+R-G)/den)
    
    h = np.zeros((rows, cols))
    h[B<=G] = thetha[B<=G]
    h[G<B] = 2*np.pi-thetha[G<B]
    h[den==0] = 0
    H = h/(2*np.pi)
    stack = np.stack([R,G,B])
    S = 1 - 3*np.min(stack, axis=0)/np.sum(stack, axis=0)
    S[(R+B+G) == 0] = 0

    return H, S, I

测试用的Lena图下载地址http://www.ece.rice.edu/~wakin/images/


rgb = tifffile.imread("./lena512color.tiff")
plt.subplots(1, 3, figsize=(10,10))
plt.subplot(1, 3, 1)
plt.title("RGB")
plt.imshow(rgb)

R, G, B = cv2.split(rgb)
H, S, I = rgb2hsi_np(R, G, B)

hsi = np.zeros((B.shape[0],B.shape[1], 3))
hsi[:,:,0] = H * 255
hsi[:,:,1] = S * 255
hsi[:,:,2] = I * 255
hsi = hsi.astype(np.uint8)
plt.subplot(1, 3, 2)
plt.title("HSI")
plt.imshow(hsi)

hsi[:,:,2] = H * 255
hsi[:,:,1] = S * 255
hsi[:,:,0] = I * 255
plt.subplot(1, 3, 3)
plt.title("HSI reverse")
plt.imshow(hsi)

结果
在这里插入图片描述
参考结果
https://www.cnblogs.com/faith0217/articles/4264652.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43867016/article/details/118736756

智能推荐

poj2063_Investment-程序员宅基地

完全背包问题。整个数据操作的

eclipse启动Tomcat服务输入http://localhost:8080/报404解决方法-程序员宅基地

eclipse启动Tomcat服务输入http://localhost:8080/报404解决方法其实如果Tomcat能够正常启动,而就算输入http://localhost:8080时出现404错误,也不会影响Tomcat作为服务器运行。通过eclipse来启动tomcat会碰到“访问http://localhost:8080出现404错误”这样的问题,需要在eclipse中进行一系列的设置才行

怎样安装golang开发环境_极客开发者的博客-程序员宅基地

一、安装go语言go语言支持多平台的操作系统go的官网地址为:https://golang.org国内地址为:https://golang.google.cn下载对应的安装包,接下来进行安装1. UNIX/Linux 安装以下是使用二进制安装文件的安装方式# 解压安装包tar -zxvf go1.16.5.linux-arm64.tar.gz# 将安装包移到系统目录sudo mv go /usr/local设置环境变量,使用sudo vim /etc/profile打开系统prof

java list全局定量,Java的定量金融/数学库-程序员宅基地

I am currenlty working on a project which relies on a couple of mathematical/statistical/financial tools which I would ideally like to include in one (perhaps several) libraries. What I would like to ..._java 金融类库

自定义View(四)之提取和封装自定义View-程序员宅基地

前言自定义View在Android中使用非常普遍,实现复杂的效果,其代码也比较多,所以就需要我们将View中绘制和逻辑控制进行提取和封装,使我们的代码更加清晰简洁。 这里以绘制一个文本,并实现跑马灯效果为例来展示一下。展示这里我们写一个BaseView继承View:import android.content.Context;import android.graphics.Canvas;imp

设计模式—设计模式七大设计原则_设计模式、设计规则-程序员宅基地

设计模式的目的软件编写过程中,程序员面临者来自:耦合性、内聚性(高内聚、低耦合)可维护性可扩展性(当需要增加新的功能时,非常的方便,成为可维护性)重用性(相同代码不用多次编写)灵活性可读性(编程规范性,便于其他程序员的阅读和理解)等等多方面的挑战,设计模式就是为了让程序具有更好的上面这些性质。另外之前听一个设计模式相关的视频,老师讲了两个金句:设计模式包含了面向对象的精髓..._设计模式、设计规则

随便推点

这些故事你尽管听,不奇葩算我输!-程序员宅基地

那些脑洞大开的“现实黑客”——这些故事你尽管听,不奇葩算我输!人们谈到黑客,脑海里下意识浮现的是两极分化的两种形象,一种顶配的黑客是基努·里维斯在《黑客帝国》里的经典造型,背头黑超长风衣,王霸之气侧漏,酷炫到没朋友;另一种则大门不出二门不迈,窝在沙发里,挂在电脑上,透过反光的镜片远程操控别人的电脑,可以是网络世界中的顶级刺客,也可以蜗居在家的邋遢宅男。事实上,这些刻板...

Linux下NFS服务器的配置_/etc/rc.d/init.d/portmap start-程序员宅基地

Linux下NFS服务器的配置类型:System V-launched Service软件包:nfs-utils进程:nfsd,lockd,rpciod,rpc.{mounted,rquotad,statd}脚本:nfs,nfslock端口:由portmap服务指派端口(111) 配置文件:/etc/exports 辅助工具:portmap(必须)相关命令:rp_/etc/rc.d/init.d/portmap start

MySQL学习9 - 单表查询-程序员宅基地

一、单表查询的语法二、关键字的执行优先级(重点)三、单表查询示例1.where约束2.group by分组查询3.聚合函数4.HAVING过滤5.order by查询排序6.limit 限制查询的记录数一、单表查询的语法SELECT 字段1,字段2... FROM 表名 WHERE 条件 ..._mysql创建一张teacher表 包含 id(int) name(varchar) sal(int)薪水, sex(varchar)

Eclipse常用快捷键-程序员宅基地

Eclipse常用快捷键1几个最重要的快捷键代码助手:Ctrl+Space(简体中文操作系统是Alt+/)快速修正:Ctrl+1单词补全:Alt+/打开外部Java文档:Shift+F2显示搜索对话框:Ctrl+H快速Outline:Ctrl+O打开资源:Ctrl+Shift+R打开类型:Ctrl+Shift+T显示重构菜单:Alt+Shift+T上一个/下一个光标的位...

基于STM32的简易示波器的UCOS II嵌入式实时操作系统实现_示波器操作系统-程序员宅基地

基于STM32的简易示波器的UCOSII嵌入式操作系统的实现_示波器操作系统

Unity模仿Scene下操作相机旋转拖拽移动缩放-程序员宅基地

模仿UnityScene模式下开发者对相机的基础操作方式就一个脚本挂相机上就行了。Demo资源点这里/***************************************************** 文件:CameraControl.cs 版本:01 作者:GZL 功能:相机旋转拖拽移动缩放*****************************************************/using System.Collections;usin