RGB 和 HSI互相转换 python代码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了RGB 和 HSI互相转换 python代码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1381字,纯文字阅读大概需要2分钟。
内容图文
![RGB 和 HSI互相转换 python代码](/upload/InfoBanner/zyjiaocheng/594/a69c93284105468396479c0c6e0e1da3.jpg)
# -*- coding: utf-8 -*-
import numpy as np
def __Rgb2Hsi(R, G, B):
# 归一化到[0,1]
R /= 255
G /= 255
B /= 255
eps = 1e-8
H, S, I = 0, 0, 0
sumRGB = R + G + B
Min = min(R,G,B)
S = 1 - 3 * Min / (sumRGB + eps)
H = np.arccos((0.5 * (R + R - G - B)) / np.sqrt((R - G) * (R - G) + (R - B) * (G - B) + eps))
if B > G:
H = 2 * np.pi - H
H = H / (2 * np.pi)
if S == 0:
H = 0
I = sumRGB / 3
return np.array([H, S, I], dtype = float)
def Rgb2Hsi(img):
HSIimg = np.zeros(img.shape, dtype = float)
width, height = img.shape[:2]
for w in range(width):
for h in range(height):
HSIimg[w,h,:] = __Rgb2Hsi(img[w,h,0],img[w,h,1],img[w,h,2])
return HSIimg
def __Hsi2Rgb(H, S, I):
pi3 = np.pi / 3
# 扩充弧度范围[0,2pi]
H *= 2 * np.pi
if H >= 0 and H < 2 * pi3:
# [0,2pi/3)对应红->绿
B = I * (1 - S)
R = I * (1 + S * np.cos(H) / np.cos(pi3 - H))
G = 3 * I - (R + B)
elif H >= 2 * pi3 and H <= 4 * pi3:
# [2pi/3,4pi/3)对应绿->蓝
H = H - 2 * pi3
R = I * (1 - S)
G = I * (1 + S * np.cos(H) / np.cos(pi3 - H))
B = 3 * I - (R + G)
else:
# [4pi/3,2pi)对应蓝->红
H = H - 4 * pi3
G = I * (1 - S)
B = I * (1 + S * np.cos(H) / np.cos(pi3 - H))
R = 3 * I - (B + G)
return (np.array([R,G,B]) * 255).astype(np.uint8)
def Hsi2Rgb(img):
RGBimg = np.zeros(img.shape, dtype = np.uint8)
width, height = img.shape[:2]
for w in range(width):
for h in range(height):
RGBimg[w,h,:] = __Hsi2Rgb(img[w,h,0],img[w,h,1],img[w,h,2])
return RGBimg
内容总结
以上是互联网集市为您收集整理的RGB 和 HSI互相转换 python代码全部内容,希望文章能够帮你解决RGB 和 HSI互相转换 python代码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。