欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

OpenCV+Python--RGB轉HSI的實現

 更新時間:2019年11月27日 09:56:11   作者:零尾  
今天小編就為大家分享一篇OpenCV+Python--RGB轉HSI的實現,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

cv2.cvtColor函數封裝了各種顏色空間之間的轉換,唯獨沒有RGB與HSI之間的轉換,網上查來查去也只有C++或MATLAB版本的,自己要用到python里,所以就寫寫python版本的。

HSI顏色模型是一個滿足計算機數字化顏色管理需要的高度抽象模擬的數學模型。HIS模型是從人的視覺系統(tǒng)出發(fā),直接使用顏色三要素–色調(Hue)、飽和度(Saturation)和亮度(Intensity,有時也翻譯作密度或灰度)來描述顏色。

RGB向HSI模型的轉換是由一個基于笛卡爾直角坐標系的單位立方體向基于圓柱極坐標的雙錐體的轉換。基本要求是將RGB中的亮度因素分離,通常將色調和飽和度統(tǒng)稱為色度,用來表示顏色的類別與深淺程度。在圖中圓錐中間的橫截面圓就是色度圓,而圓錐向上或向下延伸的便是亮度分量的表示。

從RGB空間到HSI空間的轉換有多種方法,這里僅說明最為經典的幾何推導法。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的實現就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python通過wordcloud庫實現將單詞生成詞云

    Python通過wordcloud庫實現將單詞生成詞云

    Python的wordcloud庫是一個用于生成詞云的Python包,它可以將一段文本中出現頻率高的單詞按其出現頻率大小以及顏色深淺排列成一個詞云圖形,從而更好地展示文本中的信息,你可以使用wordcloud庫來生成各種類型的詞云,本文就介紹了如何生成心型詞云
    2023-06-06
  • Python構建網頁爬蟲原理分析

    Python構建網頁爬蟲原理分析

    這篇文章主要給大家講解了構建網頁爬蟲的技術原理以及實現的邏輯關系,有興趣的朋友閱讀下吧。
    2017-12-12
  • python使用opencv按一定間隔截取視頻幀

    python使用opencv按一定間隔截取視頻幀

    這篇文章主要為大家詳細介紹了python使用opencv按一定間隔截取視頻幀,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python中函數的參數類型詳解

    Python中函數的參數類型詳解

    這篇文章主要介紹了Python中函數的參數類型詳解,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • Python數據處理之臨近匹配的實現詳解

    Python數據處理之臨近匹配的實現詳解

    在數據處理中,經常需要找到最接近給定值的元素或數據點,這種需求在科學、工程和統(tǒng)計分析中非常常見,Python 提供了多種方法來實現這種臨近匹配,下面就跟隨小編一起學習一下吧
    2024-02-02
  • pytorch GPU計算比CPU還慢的可能原因分析

    pytorch GPU計算比CPU還慢的可能原因分析

    這篇文章主要介紹了pytorch GPU計算比CPU還慢的可能原因,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 快速查找Python安裝路徑方法

    快速查找Python安裝路徑方法

    這篇文章主要介紹了快速查找Python安裝路徑方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • python 實現一次性在文件中寫入多行的方法

    python 實現一次性在文件中寫入多行的方法

    今天小編就為大家分享一篇python 實現一次性在文件中寫入多行的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python3實現釘釘消息推送的方法示例

    python3實現釘釘消息推送的方法示例

    這篇文章主要介紹了python3實現釘釘消息推送的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • python調用kubernetesAPI簡單使用方法

    python調用kubernetesAPI簡單使用方法

    這篇文章主要介紹了python調用kubernetesAPI簡單使用方法,K8s也提供API接口,提供這個接口的是管理節(jié)點的apiserver組件,下文更多相關內容,需要的小伙伴可以參考一下
    2022-05-05

最新評論