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获取标准北京时间的方法
Mar 24 Python
python 时间戳与格式化时间的转化实现代码
Mar 23 Python
python字符串的常用操作方法小结
May 21 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
python 多维切片之冒号和三个点的用法介绍
Apr 19 Python
让你Python到很爽的加速递归函数的装饰器
May 26 Python
python字符串替换第一个字符串的方法
Jun 26 Python
PyQt+socket实现远程操作服务器的方法示例
Aug 22 Python
Python数学形态学实例分析
Sep 06 Python
PyCharm下载和安装详细步骤
Dec 17 Python
Python基于smtplib模块发送邮件代码实例
May 29 Python
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
Jun 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
第十二节 类的自动加载 [12]
2006/10/09 PHP
PHP中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
PHP MySql增删改查的简单实例
2016/06/21 PHP
PHP使用strrev翻转中文乱码问题的解决方法
2017/01/13 PHP
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
javascript代码加载优化方法
2011/01/30 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
javascript实现简单的页面右下角提示信息框
2015/07/31 Javascript
JavaScript如何实现组合列表框中元素移动效果
2016/03/01 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
2016/08/19 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
2019/05/16 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
Layui实现带查询条件的分页
2019/07/27 Javascript
JavaScript中的this基本问题实例小结
2020/03/09 Javascript
Swiper实现导航栏滚动效果
2020/10/16 Javascript
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
Python tkinter label 更新方法
2018/10/11 Python
如何通过python画loss曲线的方法
2019/06/26 Python
Django用户认证系统 User对象解析
2019/08/02 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
在CentOS7下安装Python3教程解析
2020/07/09 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
北美三大旅游网站之一:Travelocity
2017/08/12 全球购物
园林施工员岗位职责
2013/12/11 职场文书
学生会招新策划书
2014/02/14 职场文书
农村文化活动总结
2014/08/28 职场文书
2014年班主任工作总结
2014/11/08 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
长城英文导游词
2015/01/30 职场文书
Python Flask实现进度条
2022/05/11 Python