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 18 Python
将pip源更换到国内镜像的详细步骤
Apr 07 Python
python 中如何获取列表的索引
Jul 02 Python
python递归法实现简易连连看小游戏
Mar 25 Python
Django url,从一个页面调到另个页面的方法
Aug 21 Python
使用Django搭建web服务器的例子(最最正确的方式)
Aug 29 Python
详细分析Python垃圾回收机制
Jul 01 Python
详解python内置模块urllib
Sep 09 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 Python
python 爬虫爬取京东ps4售卖情况
Dec 18 Python
python文本处理的方案(结巴分词并去除符号)
May 26 Python
Python Pandas数据分析之iloc和loc的用法详解
Nov 11 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四大安全策略
2014/03/12 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
有趣的JavaScript数组长度问题代码说明
2011/01/20 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
JavaScript简介_动力节点Java学院整理
2017/06/26 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
JS加载解析Markdown文档过程详解
2020/05/19 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
2020/06/01 Javascript
Postman内建变量常用方法实例解析
2020/07/28 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
python实现ip查询示例
2014/03/26 Python
Python中的rfind()方法使用详解
2015/05/19 Python
Python中断言Assertion的一些改进方案
2016/10/27 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
Python中的random.uniform()函数教程与实例解析
2019/03/02 Python
python字典一键多值实例代码分享
2019/06/14 Python
Python实现银行账户资金交易管理系统
2020/01/03 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
python自动下载图片的方法示例
2020/03/25 Python
django教程如何自学
2020/07/31 Python
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
"火柴棍式"程序员面试题
2014/03/16 面试题
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
教师党员先进性教育自我剖析材料思想汇报
2014/09/24 职场文书
2014年工商所工作总结
2014/12/09 职场文书
校园安全学习心得体会
2016/01/18 职场文书
python办公自动化之excel的操作
2021/05/23 Python
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL