opencv中的色彩空間及其轉換

在 OpenCV 中,色彩空間(Color Space)指的是表示顏色的一種方式,或是用數學模型對顏色的表達。不同的色彩空間采用不同的方式來描述顏色的三要素(如亮度、飽和度、色調),因此可以在不同的應用場景下提供不同的優點。

在計算機視覺和圖像處理中,了解和轉換不同的色彩空間是非常重要的,因為某些操作(例如,目標檢測、圖像分割、特征提取等)在某些色彩空間中比在其他色彩空間中更加有效。

1. 常見的色彩空間

OpenCV 支持多種色彩空間的轉換。以下是常見的幾種色彩空間:

1.1 RGB(Red, Green, Blue)和?BGR(Blue, Green, Red)

RGB:

  • RGB 是最常用的色彩空間,尤其是在顯示設備(如顯示器、電視)中。每種顏色通道(紅、綠、藍)用一個整數值表示,通常是 0 到 255(即 8 位表示)。
  • 該色彩空間直觀且易于理解,主要用于顯示和圖像采集。每個顏色通道的值分別代表圖像中的紅、綠和藍的強度。
BGR:
  • BGR 是 OpenCV 中的默認色彩空間。雖然 RGB 更常見,但 OpenCV 默認讀取圖像為 BGR 格式。這是因為 OpenCV 設計時參考了早期的一些硬件標準。
  • 在 BGR 色彩空間中,藍色(Blue)是第一個通道,綠色(Green)是第二個通道,紅色(Red)是第三個通道。
  • opencv中imread、imshow、imwrite都是使用的BGR的順序。
import cv2# 讀取 RGB 圖像
img_bgr = cv2.imread('./images/bg.jpg')
print(img_bgr.shape)  # 輸出圖像的尺寸,通常是 (height, width, channels)
print(img_bgr[0, 0, :]) # 查看第一像素的顏色值 [192 162 105] [B,G,R]
cv2.imshow('bgr', img_bgr)img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_RGB2BGR)
print(img_rgb.shape)
print(img_rgb[0, 0, :]) # 查看第一像素的顏色值 [105 162 192] [R,G,B]
cv2.imshow('rgb', img_rgb) # 圖像轉成RGB后imshow顯示會有所變化cv2.waitKey(0)
cv2.destroyAllWindows()
1.3 HSV(Hue, Saturation, Value)
  • HSV 是一種在色彩選擇、圖像分割和增強中非常常用的色彩空間。它通過三個參數來描述顏色:色調(Hue)、飽和度(Saturation)和明度(Value)。

    • 色調(H):顏色的類型,通常表示為角度,范圍為 0° 到 360°,例如,紅色為 0°,綠色為 120°,藍色為 240°。
    • 飽和度(S):顏色的純度或強度,范圍是 0 到 100%。0 表示灰色,100% 表示最純的顏色。
    • 明度(V):顏色的亮度或亮度,范圍是 0 到 100%。0 表示完全黑色,100% 表示最亮的顏色。
  • 在 HSV 空間中,圖像的顏色信息更符合人類的視覺感知,通常在圖像分割、顏色跟蹤等任務中表現優異。

# BGR 轉換到 HSV 
img_hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV)
print(img_hsv) # (200, 300, 3)
print(img_hsv[0,0,:]) # 第一個像素的hsv值:[100, 116, 192] [h,s,v]
1.4 HLS(Hue, Lightness, Saturation)
  • HLS 色彩空間與 HSV 相似,但將飽和度和亮度的位置交換。HLS 也常用于色彩處理,它比 HSV 更能模擬人眼對顏色的感知。
    • 色調(H):與 HSV 中的色調相同,表示顏色的類型。
    • 亮度(L):亮度的描述,不同于 HSV 中的明度,HLS 中的亮度表現方式與實際視覺體驗更接近。
    • 飽和度(S):顏色的飽和度,范圍 0 到 100%。
# BGR 轉換到 HLS 
img_hls = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HLS)
print(img_hls.shape) # (200, 300, 3)
print(img_hls[0,0,:]) # [100 149 104]
1.5 Lab(CIELAB)
  • Lab 是一種基于人類視覺感知的色彩空間,分為三個通道:

    • L:亮度(Lightness),范圍是 0 到 100,0 表示黑色,100 表示白色。
    • a:綠色到紅色的色差,負值表示綠色,正值表示紅色。
    • b:藍色到黃色的色差,負值表示藍色,正值表示黃色。
  • Lab 色彩空間的一個重要特點是它是與設備無關的(與顯示設備的亮度、對比度等無關),因此在許多圖像處理任務中具有很好的穩定性。

# BGR 轉換到 Lab 
img_lab = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2LAB)
print(img_lab.shape) # (200, 300, 3)
print(img_lab[0,0,:]) # [163 117 107]
1.6 YUV
  • YUV 色彩空間常用于視頻編碼和廣播電視等應用。它將顏色分為亮度分量(Y)和色度分量(U 和 V),因此能夠更有效地處理視頻圖像。
    • Y:亮度分量(Luminance),范圍是 0 到 255。
    • U 和 V:色度分量,表示色彩信息,范圍是 -128 到 127。
# BGR 轉換到 YUV 
img_yuv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2YUV)
print(img_yuv.shape) # (200, 300, 3)
print(img_yuv[0,0,:]) # [148 150  90]

2. 常見色彩空間轉換

OpenCV 提供了非常方便的色彩空間轉換函數 cv2.cvtColor。以下是一些常見的色彩空間轉換:

  • BGR 到 HSV

    img_hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV)
  • BGR 到 RGB

    img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
  • BGR 到 Lab

    img_lab = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2LAB)
  • BGR 到 YUV

    img_yuv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2YUV)
  • RGB 到 HSV

    img_hsv = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2HSV)

3. 使用色彩空間的場景

3.1 圖像分割

在某些色彩空間(例如 HSV、Lab)中,分割圖像中的不同顏色區域比在 RGB 空間中更為簡便。例如,我們可以通過設置合適的色調、飽和度和亮度閾值來提取特定顏色的區域。

3.2 目標追蹤

HSV 和 HLS 空間的色調分量對于目標追蹤特別有效,尤其是在目標的顏色變化較大時,使用色調(H)來進行追蹤更為準確。

3.3 顏色校正與增強

Lab 和 YUV 空間在顏色校正和增強中非常常用,特別是在改變圖像的亮度、對比度、飽和度時。

4. 總結

OpenCV 支持多種色彩空間,每種色彩空間有其特定的優點,選擇合適的色彩空間可以幫助我們更好地完成圖像處理任務。常見的色彩空間包括 RGB、BGR、HSV、HLS、Lab 和 YUV,每個空間通過不同的方式表示顏色信息。在進行圖像處理時,理解這些色彩空間的特點和如何在它們之間進行轉換是非常重要的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63638.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63638.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63638.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OPPO 數據分析面試題及參考答案

如何設計共享單車數據庫的各個字段? 對于共享單車的數據庫設計,首先考慮用戶相關的字段。用戶表可以包含用戶 ID,這是一個唯一標識符,用于區分不同用戶;姓名,記錄用戶的真實姓名;聯系方式,比如手機號碼,方便在出現問題時聯系用戶;注冊時間,記錄用戶何時開始使用共享…

在Ubuntu下運行QEMU仿真FreeBSD riscv64系統

在Ubuntu下運行QEMU仿真FreeBSD riscv64系統 突發奇想,嘗試在Ubuntu下運行QEMU仿真FreeBSD riscv64系統, 參考這篇文檔:手把手教你在QEMU上運行RISC-V Linux_qemu 運行 .bin-CSDN博客 并參考FreeBSD的Wiki:riscv - FreeBSD Wik…

大模型微調---Prompt-tuning微調

目錄 一、前言二、Prompt-tuning實戰2.1、下載模型到本地2.2、加載模型與數據集2.3、處理數據2.4、Prompt-tuning微調2.5、訓練參數配置2.6、開始訓練 三、模型評估四、完整訓練代碼 一、前言 Prompt-tuning通過修改輸入文本的提示(Prompt)來引導模型生…

Visual Studio 、 MSBuild 、 Roslyn 、 .NET Runtime、SDK Tools之間的關系

1. Visual Studio Visual Studio 是一個集成開發環境(IDE),為開發者提供代碼編寫、調試、測試和發布等功能。它內置了 MSBuild、Roslyn 和 SDK Tools,并提供圖形化界面來方便開發者進行項目管理和構建。與其他組件的關系&#xf…

Winnows基礎(2)

Target 了解常見端口及服務,熟練cmd命令,編寫簡單的 .bat 病毒程序。 Trail 常見服務及端口 80 web 80-89 可能是web 443 ssl心臟滴血漏洞以及一些web漏洞測試 445 smb 1433 mssql 1521 oracle 2082/2083 cpanel主機管理系統登陸(國外用的…

Edge Scdn用起來怎么樣?

Edge Scdn:提升網站安全與性能的最佳選擇 在當今互聯網高速發展的時代,各種網絡攻擊層出不窮,特別是針對網站的DDoS攻擊威脅,幾乎每個行業都可能成為目標。為了確保網站的安全性與穩定性,越來越多的企業開始關注Edge …

通信技術以及5G和AI保障電網安全與網絡安全

摘 要:電網安全是電力的基礎,隨著智能電網的快速發展,越來越多的ICT信息通信技術被應用到電力網絡。本文分析了歷史上一些重大電網安全與網絡安全事故,介紹了電網安全與網絡安全、通信技術與電網安全的關系以及相應的電網安全標準…

梯度(Gradient)和 雅各比矩陣(Jacobian Matrix)的區別和聯系:中英雙語

雅各比矩陣與梯度:區別與聯系 在數學與機器學習中,梯度(Gradient) 和 雅各比矩陣(Jacobian Matrix) 是兩個核心概念。雖然它們都描述了函數的變化率,但應用場景和具體形式有所不同。本文將通過…

時間序列預測論文閱讀和相關代碼庫

時間序列預測論文閱讀和相關代碼庫列表 MLP-based的時間序列預測資料DLinearUnetTSFPDMLPLightTS 代碼庫以及論文庫:Time-Series-LibraryUnetTSFLightTS MLP-based的時間序列預測資料 我會定期把我的所有時間序列預測論文有關的資料鏈接全部同步到這個文章中&#…

引言和相關工作的區別

引言和相關工作的區別 引言 目的與重點 引言主要是為了引出研究的主題,向讀者介紹為什么這個研究問題是重要且值得關注的。它通常從更廣泛的背景出發,闡述研究領域的現狀、面臨的問題或挑戰,然后逐漸聚焦到論文要解決的具體問題上。例如,在這篇關于聯邦學習數據交易方案的…

GitLab分支管理策略和最佳實踐

分支管理是 Git 和 GitLab 中非常重要的部分,合理的分支管理可以幫助團隊更高效地協作和開發。以下是一些細化的分支管理策略和最佳實踐: 1. 分支命名規范 ? 主分支:通常命名為 main 或 master,用于存放穩定版本的代碼。 ? …

批量提取zotero的論文構建知識庫做問答的大模型(可選)——含轉存PDF-分割統計PDF等

文章目錄 提取zotero的PDF上傳到AI平臺保留文件名代碼分成20個PDF視頻講解 提取zotero的PDF 右鍵查看目錄 發現目錄為 C:\Users\89735\Zotero\storage 寫代碼: 掃描路徑‘C:\Users\89735\Zotero\storage’下面的所有PDF文件,全部復制一份匯總到"C:\Users\89735\Downl…

LabVIEW實現NB-IoT通信

目錄 1、NB-IoT通信原理 2、硬件環境部署 3、程序架構 4、前面板設計 5、程序框圖設計 6、測試驗證 本專欄以LabVIEW為開發平臺,講解物聯網通信組網原理與開發方法,覆蓋RS232、TCP、MQTT、藍牙、Wi-Fi、NB-IoT等協議。 結合實際案例,展示如何利用LabVIEW和常用模塊實現物聯網…

面試題整理9----談談對k8s的理解2

面試題整理9----談談對k8s的理解2 1. Service 資源1.1 ServiceClusterIPNodePortLoadBalancerIngressExternalName 1.2 Endpoints1.3 Ingress1.4 EndpointSlice1.5 IngressClass 2. 配置和存儲資源2.1 ConfigMap2.2 Secret2.3 PersistentVolume2.4 PersistentVolumeClaim2.5 St…

精準采集整車信號:風丘混合動力汽車工況測試

一 背景 混合動力汽車是介于純電動汽車與燃油汽車兩者之間的一種新能源汽車。它既包含純電動汽車無污染、啟動快的優勢,又擁有燃油車續航便捷、不受電池容量限制的特點。在當前環境下,混合動力汽車比純電動汽車更符合目前的市場需求。 然而&#xff0c…

帶標題和不帶標題的內部表

什么是工作區? 什么是工作區?簡單來說,工作區是單行數據。它們應具有與任何內部表相同的格式。它用于一次處理一行內部表中的數據。 內表和工作區的區別 ? 一圖勝千言 內表的類型 有兩種類型的內表: 帶 Header 行…

【圖像分類實用腳本】數據可視化以及高數量類別截斷

圖像分類時,如果某個類別或者某些類別的數量遠大于其他類別的話,模型在計算的時候,更傾向于擬合數量更多的類別;因此,觀察類別數量以及對數據量多的類別進行截斷是很有必要的。 1.準備數據 數據的格式為圖像分類數據集…

【Leetcode 每日一題】2545. 根據第 K 場考試的分數排序

問題背景 班里有 m m m 位學生,共計劃組織 n n n 場考試。給你一個下標從 0 0 0 開始、大小為 m n m \times n mn 的整數矩陣 s c o r e score score,其中每一行對應一位學生,而 s c o r e [ i ] [ j ] score[i][j] score[i][j] 表示…

React系列(八)——React進階知識點拓展

前言 在之前的學習中,我們已經知道了React組件的定義和使用,路由配置,組件通信等其他方法的React知識點,那么本篇文章將針對React的一些進階知識點以及React16.8之后的一些新特性進行講解。希望對各位有所幫助。 一、setState &am…

PCIe_Host驅動分析_地址映射

往期內容 本文章相關專欄往期內容,PCI/PCIe子系統專欄: 嵌入式系統的內存訪問和總線通信機制解析、PCI/PCIe引入 深入解析非橋PCI設備的訪問和配置方法 PCI橋設備的訪問方法、軟件角度講解PCIe設備的硬件結構 深入解析PCIe設備事務層與配置過程 PCIe的三…