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编程中包的概念与管理
Oct 16 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
Dec 15 Python
Python常见字符串操作函数小结【split()、join()、strip()】
Feb 02 Python
Django 实现下载文件功能的示例
Mar 06 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
May 16 Python
python多行字符串拼接使用小括号的方法
Mar 19 Python
Python2与Python3的区别实例分析
Apr 11 Python
python切片(获取一个子列表(数组))详解
Aug 09 Python
使用OpenCV实现仿射变换—平移功能
Aug 29 Python
使用 Python 读取电子表格中的数据实例详解
Apr 17 Python
scrapy中如何设置应用cookies的方法(3种)
Sep 22 Python
python从Oracle读取数据生成图表
Oct 14 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 空格,换行,跳格使用说明
2009/12/18 PHP
php定时计划任务与fsockopen持续进程实例
2014/05/23 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
详解Yii实现分页的两种方法
2017/01/14 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
jQuery实现原理的模拟代码 -6 代码下载
2010/08/16 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
jQuery实现复选框批量选择与反选的方法
2015/06/17 Javascript
轻松掌握JavaScript中的Math object数学对象
2016/05/26 Javascript
Node.js实现文件上传
2016/07/05 Javascript
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
Javasript设计模式之链式调用详解
2018/04/26 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
vue.js高德地图实现热点图代码实例
2019/04/18 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
p5.js绘制创意自画像
2019/11/04 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
Element DateTimePicker日期时间选择器的使用示例
2020/07/27 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
[50:11]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第三场
2018/04/09 DOTA
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
django框架自定义用户表操作示例
2018/08/07 Python
pandas对dataFrame中某一个列的数据进行处理的方法
2019/07/08 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
Python字典底层实现原理详解
2019/12/18 Python
python中threading开启关闭线程操作
2020/05/02 Python
管理专员自荐信
2014/01/26 职场文书
市场推广策划方案
2014/06/02 职场文书
关于工作经历的证明书
2014/10/11 职场文书
老龙头导游词
2015/02/11 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang