OpenCV+Python--RGB转HSI的实现


Posted in Python onNovember 27, 2019

cv2.cvtColor函数封装了各种颜色空间之间的转换,唯独没有RGB与HSI之间的转换,网上查来查去也只有C++或MATLAB版本的,自己要用到python里,所以就写写python版本的。

HSI颜色模型是一个满足计算机数字化颜色管理需要的高度抽象模拟的数学模型。HIS模型是从人的视觉系统出发,直接使用颜色三要素?色调(Hue)、饱和度(Saturation)和亮度(Intensity,有时也翻译作密度或灰度)来描述颜色。

RGB向HSI模型的转换是由一个基于笛卡尔直角坐标系的单位立方体向基于圆柱极坐标的双锥体的转换。基本要求是将RGB中的亮度因素分离,通常将色调和饱和度统称为色度,用来表示颜色的类别与深浅程度。在图中圆锥中间的横截面圆就是色度圆,而圆锥向上或向下延伸的便是亮度分量的表示。

OpenCV+Python--RGB转HSI的实现

从RGB空间到HSI空间的转换有多种方法,这里仅说明最为经典的几何推导法。RGB与HSI之间的转换关系为:

OpenCV+Python--RGB转HSI的实现

下面直接上代码:

import cv2
import numpy as np

def rgbtohsi(rgb_lwpImg):
  rows = int(rgb_lwpImg.shape[0])
  cols = int(rgb_lwpImg.shape[1])
  b, g, r = cv2.split(rgb_lwpImg)
  # 归一化到[0,1]
  b = b / 255.0
  g = g / 255.0
  r = r / 255.0
  hsi_lwpImg = rgb_lwpImg.copy()
  H, S, I = cv2.split(hsi_lwpImg)
  for i in range(rows):
    for j in range(cols):
      num = 0.5 * ((r[i, j]-g[i, j])+(r[i, j]-b[i, j]))
      den = np.sqrt((r[i, j]-g[i, j])**2+(r[i, j]-b[i, j])*(g[i, j]-b[i, j]))
      theta = float(np.arccos(num/den))

      if den == 0:
          H = 0
      elif b[i, j] <= g[i, j]:
        H = theta
      else:
        H = 2*3.14169265 - theta

      min_RGB = min(min(b[i, j], g[i, j]), r[i, j])
      sum = b[i, j]+g[i, j]+r[i, j]
      if sum == 0:
        S = 0
      else:
        S = 1 - 3*min_RGB/sum

      H = H/(2*3.14159265)
      I = sum/3.0
      # 输出HSI图像,扩充到255以方便显示,一般H分量在[0,2pi]之间,S和I在[0,1]之间
      hsi_lwpImg[i, j, 0] = H*255
      hsi_lwpImg[i, j, 1] = S*255
      hsi_lwpImg[i, j, 2] = I*255
  return hsi_lwpImg
if __name__ == '__main__':
  rgb_lwpImg = cv2.imread("123.jpg")
  hsi_lwpImg = rgbtohsi(rgb_lwpImg)

  cv2.imshow('rgb_lwpImg', rgb_lwpImg)
  cv2.imshow('hsi_lwpImg', hsi_lwpImg)

  key = cv2.waitKey(0) & 0xFF
  if key == ord('q'):
    cv2.destroyAllWindows()

OpenCV+Python--RGB转HSI的实现

以上这篇OpenCV+Python--RGB转HSI的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中int()函数的用法浅析
Oct 17 Python
python生成随机图形验证码详解
Nov 08 Python
python Spyder界面无法打开的解决方法
Apr 27 Python
Pycharm 操作Django Model的简单运用方法
May 23 Python
基于python绘制科赫雪花
Jun 22 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
Nov 06 Python
python每5分钟从kafka中提取数据的例子
Dec 23 Python
pytorch中的inference使用实例
Feb 20 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
Python plt 利用subplot 实现在一张画布同时画多张图
Feb 26 Python
pycharm配置安装autopep8自动规范代码的实现
Mar 02 Python
Python基本知识点总结
Apr 07 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
Nov 27 #Python
python的range和linspace使用详解
Nov 27 #Python
python定间隔取点(np.linspace)的实现
Nov 27 #Python
Python进程池Pool应用实例分析
Nov 27 #Python
python进程池实现的多进程文件夹copy器完整示例
Nov 27 #Python
python list数据等间隔抽取并新建list存储的例子
Nov 27 #Python
Python如何使用Gitlab API实现批量的合并分支
Nov 27 #Python
You might like
WHOIS类的修改版
2006/10/09 PHP
mac系统下为 php 添加 pcntl 扩展
2016/08/28 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
javascript 动态添加事件代码
2008/11/30 Javascript
网络之美 JavaScript中Get和Set访问器的实现代码
2010/09/19 Javascript
javascript的原生方法获取数组中的最大(最小)值
2012/12/19 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
2013/01/04 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
JavaScript实现给定时间相加天数的方法
2016/01/25 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
layui 优化button按钮和弹出框的方法
2018/08/15 Javascript
JavaScript ES6中的简写语法总结与使用技巧
2018/12/30 Javascript
React学习之JSX与react事件实例分析
2020/01/06 Javascript
Python动态加载模块的3种方法
2014/11/22 Python
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
一步步教你用Python实现2048小游戏
2017/01/19 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
django 多数据库及分库实现方式
2020/04/01 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
2020/04/01 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
美国第二大团购网站:LivingSocial
2016/07/24 全球购物
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
副科级后备干部考察材料
2014/05/15 职场文书
广播节目策划方案
2014/05/23 职场文书
中学清明节活动总结
2014/07/04 职场文书
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书