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使用PyGame模块播放声音的方法
May 20 Python
详解Python的Django框架中inclusion_tag的使用
Jul 21 Python
使用Python的PIL模块来进行图片对比
Feb 18 Python
Python自动生产表情包
Mar 17 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
Jul 26 Python
pygame实现简易飞机大战
Sep 11 Python
Python3爬虫之urllib携带cookie爬取网页的方法
Dec 28 Python
通过PYTHON来实现图像分割详解
Jun 26 Python
如何给Python代码进行加密
Jan 10 Python
Python描述数据结构学习之哈夫曼树篇
Sep 07 Python
Python自定义sorted排序实现方法详解
Sep 18 Python
Python 恐龙跑跑小游戏实现流程
Feb 15 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
PHP与C#分别格式化文件大小的代码
2011/05/14 PHP
PHP 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
php实现分页工具类分享
2014/01/09 PHP
php加密解密字符串示例
2016/10/13 PHP
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
javascript eval和JSON之间的联系
2009/12/31 Javascript
javascript深入理解js闭包
2010/07/03 Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
JS实现图片剪裁并预览效果
2016/08/12 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
2016/12/13 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
layui动态表头的实现代码
2019/08/22 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
2019/09/28 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
Python3中的真除和Floor除法用法分析
2016/03/16 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
python基于Selenium的web自动化框架
2019/07/14 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
艺术设计专业个人求职信
2013/09/21 职场文书
大学生实习期自我评价范文
2013/10/03 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
师德师风事迹材料
2014/12/20 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
《神奇的鸟岛》教学反思
2016/02/22 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
详解redis在微服务领域的贡献
2021/10/16 Redis