圖像處理之HSV顏色空間

目錄

1 RGB 的局限性

2 HSV 顏色空間

3 RGB與HSV相互轉換

4 HSV顏色模型對圖像的色相、飽和度和明度進行調節

5 演示Demo

5.1 開發環境

5.2 功能介紹

5.3 下載地址

參考


1 RGB 的局限性

????????RGB 是我們接觸最多的顏色空間,由三個通道表示一幅圖像,分別為紅色(R),綠色(G)和藍色(B)。這三種顏色的不同組合可以形成幾乎所有的其他顏色。

????????RGB 顏色空間是圖像處理中最基本、最常用、面向硬件的顏色空間,比較容易理解。

????????RGB 顏色空間利用三個顏色分量的線性組合來表示顏色,任何顏色都與這三個分量有關,而且這三個分量是高度相關的,所以連續變換顏色時并不直觀,想對圖像的顏色進行調整需要更改這三個分量才行。

????????自然環境下獲取的圖像容易受自然光照、遮擋和陰影等情況的影響,即對亮度比較敏感。而 RGB 顏色空間的三個分量都與亮度密切相關,即只要亮度改變,三個分量都會隨之相應地改變,而沒有一種更直觀的方式來表達

????????但是人眼對于這三種顏色分量的敏感程度是不一樣的,在單色中,人眼對紅色最不敏感,藍色最敏感,所以 RGB 顏色空間是一種均勻性較差的顏色空間。如果顏色的相似性直接用歐氏距離來度量,其結果與人眼視覺會有較大的偏差。對于某一種顏色,我們很難推測出較為精確的三個分量數值來表示。所以,RGB 顏色空間適合于顯示系統,卻并不適合于圖像處理。

2 HSV 顏色空間

????????基于上述理由,在圖像處理中使用較多的是 HSV 顏色空間,它比 RGB 更接近人們對彩色的感知經驗。非常直觀地表達顏色的色調、鮮艷程度和明暗程度,方便進行顏色的對比。

????????在 HSV 顏色空間下,比 RGB 更容易跟蹤某種顏色的物體,常用于分割指定顏色的物體。

????????HSV 表達彩色圖像的方式由三個部分組成:

  • Hue(色調、色相),相當于基調,是下圖的俯視圖得到的圓,圓上不同位置的顏色基調不同,把顏色分成了360°,每個位置有不同的顏色基調;

  • Saturation(飽和度、色彩純凈度):純度,沿著俯視圖得到的圓的半徑看,因為圓弧上的點代表該處的顏色的基調,那么半徑上就是從純白色到該基調顏色過渡過程中不同位置的純度,在圓心處純度為0,在圓弧上(該色調)純度為100;

  • Value(明度):亮度,沿著圓柱的高來看,圓柱表面上平行于圓柱軸上的點的顏色基調相同,純度也相同,但是明暗程度不同。同時,該圓柱的半徑也不同,相當于磁盤的柱面。

????????用下面這個圓柱體來表示 HSV 顏色空間,圓柱體的橫截面可以看做是一個極坐標系 ,H 用極坐標的極角表示,S 用極坐標的極軸長度表示,V 用圓柱中軸的高度表示。

  • 色相H:表示色彩信息,即所處的光譜顏色的位置。該參數用一角度量來表示,取值范圍為0°~360°。其中0°為紅色,60°為黃色,120°為綠色,180°為青色,240°為藍色,300°為紫色。

  • 飽和度S:表示色彩的純度,取值范圍為0.0~1.0。值越大,純度越高,接近光譜色的程度也就越高,圖像越鮮艷。

  • 明度V:表示色彩的明亮程度,取值范圍為0.0(黑色)~1.0(白色)。明度越高,色彩越亮。

3 RGBHSV相互轉換

????????了解了HSV的顏色特性之后,就可以在實際使用中RGB顏色值轉換為HSV顏色值,然后對色相、飽和度和明度進行調整。達到效果需求之后,再轉換為RGB值顯示在屏幕上保存結果。

????????下面使用C語言編程實現RGB與HSV的轉換

#include"TRGB2HSV.h"
#include"Commen.h"
#include<stdlib.h>
#include<math.h>void RGB2HSV(unsigned char R, unsigned char G, unsigned char B, float* h, float* s, float * v)
{float min, max;float r = R / 255.0;float g = G / 255.0;float b = B / 255.0;min = MIN2(r,MIN2(g,b));max = MAX2(r,MAX2(g,b));if (max == min)*h = 0;else if (max == r && g >= b)*h = 60.0 * (g - b) / (max - min);else if (max == r && g < b)*h = 60.0 * (g - b) / (max - min) + 360.0;else if (max == g)*h = 60.0 * (b - r) / (max - min) + 120.0;else if (max == b)*h = 60.0 * (r - g) / (max - min) + 240.0; *h = CLIP3(*h, 0, 360);if (max == 0)*s = 0;else*s = (max - min) / max;*v = max;
};void HSV2RGB(float h, float s, float v, unsigned char* R, unsigned char *G, unsigned char *B)
{float q = 0, p = 0, t = 0, f = 0, r = 0, g = 0, b = 0;int hN = 0;if(h == 360)h = 0;if (h < 0)h = 360 + h;hN = (int)((int)h / 60);f = h / 60.0f - hN;p = v * (1.0 - s);q = v * (1.0 - f * s);t = v * (1.0 - (1.0 - f) * s);switch (hN){case 0:r = v;g = t;b = p;break;case 1:r = q;g = v;b = p;break;case 2:r = p;g = v;b = t;break;case 3:r = p;g = q;b = v;break;case 4:r = t;g = p;b = v;break;case 5:r = v;g = p;b = q;break;default:break;}*R = (unsigned char)CLIP3((r * 255.0),0,255);*G = (unsigned char)CLIP3((g * 255.0),0,255);*B = (unsigned char)CLIP3((b * 255.0),0,255);
};

4 HSV顏色模型對圖像的色相、飽和度和明度進行調節

/*************************************************
功    能:HSV調整
參    數:srcData     - [輸入/輸出] 原始圖像,格式為32位BGRA格式,執行后修為結果圖像width       - [輸入] 原始圖像寬度height      - [輸入] 原始圖像高度tride       - [輸入] 原始圖像的Stride(也就是行字節數width*4)hIntensity  - [輸入] h值sIntensity  - [輸入] s值vIntensity  - [輸入] v值
返    回: 0-成功, 其他-失敗.
*************************************************/
int adjustHSV(unsigned char *srcData, int width, int height, int stride, float hIntensity, float sIntensity, float vIntensity)
{int ret = 0;if (srcData == NULL){printf("input image is null!");return -1;}//Processunsigned char R, G, B;float h = 0, s = 0, v = 0;unsigned char* pSrc = srcData;int offset = stride - width * 4;for (int j = 0; j < height; j++){for (int i = 0; i < width; i++){B = pSrc[0];G = pSrc[1];R = pSrc[2];RGB2HSV(R, G, B, &h, &s, &v);h = h + hIntensity > 360 ? h + hIntensity - 360 : h + hIntensity;s = CLIP3(s + sIntensity, 0, 1.0f);v = CLIP3(v + vIntensity, 0, 1.0f);HSV2RGB(h, s, v, &R, &G, &B);pSrc[0] = B;pSrc[1] = G;pSrc[2] = R;pSrc += 4;}pSrc += offset;}return ret;
};

5 演示Demo

5.1 開發環境

  • Windows 10 Pro x64

  • Visual Studio 2015

5.2 功能介紹

????????演示程序主界面如下圖所示,具有圖像讀取、顯示、保存、顯示RGBA值,以及HSV調整、鼠標按鍵按下顯示原圖、鼠標按鍵抬起顯示效果圖等功能。

原圖

效果圖(h=26, s=0.12, v=0.16)

5.3 下載地址

????????開發環境:

  • Windows 10 pro x64

  • Visual Studio 2015

????????下載地址: 圖像處理之HSV顏色空間

參考

????????圖像視頻濾鏡與人像美顏美妝算法詳解. 胡耀武、譚娟、李云夕. 電子工業出版社、2020-07

?

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

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

相關文章

DeepSeek是由杭州深度求索人工智能基礎技術研究有限公司(簡稱“深度求索”)發布的一系列人工智能模型

DeepSeek是由杭州深度求索人工智能基礎技術研究有限公司&#xff08;簡稱“深度求索”&#xff09;發布的一系列人工智能模型&#xff0c;其在知識類任務上展現出了卓越的性能。以下是對DeepSeek的詳細介紹&#xff0c;內容雖無法達到10000字&#xff0c;但會盡可能全面且深入地…

【C++高并發服務器WebServer】-9:多線程開發

本文目錄 一、線程概述1.1 線程和進程的區別1.2 線程之間共享和非共享資源1.3 NPTL 二、線程操作2.1 pthread_create2.2 pthread_exit2.3 pthread_join2.4 pthread_detach2.5 patch_cancel2.6 pthread_attr 三、實戰demo四、線程同步五、死鎖六、讀寫鎖七、生產消費者模型 一、…

14-6-1C++STL的list

(一&#xff09;list容器的基本概念 list容器簡介&#xff1a; 1.list是一個雙向鏈表容器&#xff0c;可高效地進行插入刪除元素 2.list不可以隨機存取元素&#xff0c;所以不支持at.(pos)函數與[ ]操作符 &#xff08;二&#xff09;list容器頭部和尾部的操作 list對象的默…

在sortablejs的拖拽排序情況下阻止input拖拽事件

如題 問題 在vue3的elementPlus的table中&#xff0c;通過sortablejs添加了行拖拽功能&#xff0c;但是在行內會有輸入框&#xff0c;此時拖拽輸入框會觸發sortablejs的拖拽功能 解決 基于這個現象&#xff0c;我懷疑是由于拖拽事件未綁定而冒泡到后面的行上從而導致的拖拽…

21.Word:小趙-畢業論文排版?【39】

目錄 題目? NO1.2 NO3.4 NO5.6 NO7.8.9 NO10.11.12 題目 NO1.2 自己的論文當中接收老師的修改&#xff1a;審閱→比較→源文檔&#xff1a;考生文件夾&#xff1a;Word.docx→修訂的文檔&#xff1a;考生文件夾&#xff1a;教師修改→確定→接收→接收所有修訂將合并之…

leetcode_鏈表 876.鏈表的中間節點

876.鏈表的中間節點 給你單鏈表的頭結點 head &#xff0c;請你找出并返回鏈表的中間結點。如果有兩個中間結點&#xff0c;則返回第二個中間結點。思路&#xff1a;快慢指針&#xff0c;創建兩個指針fast和slow&#xff0c;fast指針每次移動兩步&#xff0c;slow指針每次移動…

深度學習 DAY3:NLP發展史及早期的前饋神經網絡(ANN)及多任務學習

NLP發展史 NLP發展脈絡簡要梳理如下&#xff1a; 2001 - Neural language models&#xff08;神經語言模型&#xff09; 2008 - Multi-task learning&#xff08;多任務學習&#xff09; 2013 - Word embeddings&#xff08;詞嵌入&#xff09; 2013 - Neural networks for NL…

全面了解 Web3 AIGC 和 AI Agent 的創新先鋒 MelodAI

不管是在傳統領域還是 Crypto&#xff0c;AI 都是公認的最有前景的賽道。隨著數字內容需求的爆炸式增長和技術的快速迭代&#xff0c;Web3 AIGC&#xff08;AI生成內容&#xff09;和 AI Agent&#xff08;人工智能代理&#xff09;正成為兩大關鍵賽道。 AIGC 通過 AI 技術生成…

54.數字翻譯成字符串的可能性|Marscode AI刷題

1.題目 問題描述 小M獲得了一個任務&#xff0c;需要將數字翻譯成字符串。翻譯規則是&#xff1a;0對應"a"&#xff0c;1對應"b"&#xff0c;依此類推直到25對應"z"。一個數字可能有多種翻譯方法。小M需要一個程序來計算一個數字有多少種不同的…

FileReader使用

FileReader : 讀取文件內容的api&#xff0c;&#xff0c;&#xff0c;在前端處理上傳的文件&#xff0c;&#xff0c;比如預覽圖片 readAsDataURL(file) &#xff1a; 讀取為base64編碼的 data urlreadAsText() &#xff1a; 讀取為文本readAsArrayBuffer() : 讀取為二進制 …

RabbitMQ5-死信隊列

目錄 死信的概念 死信的來源 死信實戰 死信之TTl 死信之最大長度 死信之消息被拒 死信的概念 死信&#xff0c;顧名思義就是無法被消費的消息&#xff0c;一般來說&#xff0c;producer 將消息投遞到 broker 或直接到queue 里了&#xff0c;consumer 從 queue 取出消息進…

JavaScript系列(48)-- 3D渲染引擎實現詳解

JavaScript 3D渲染引擎實現詳解 &#x1f3ae; 今天&#xff0c;讓我們深入探討JavaScript的3D渲染引擎實現。通過WebGL和現代JavaScript技術&#xff0c;我們可以構建一個功能完整的3D渲染系統。 3D渲染基礎概念 &#x1f31f; &#x1f4a1; 小知識&#xff1a;3D渲染引擎的…

10JavaWeb——SpringBootWeb案例01

前面我們已經講解了Web前端開發的基礎知識&#xff0c;也講解了Web后端開發的基礎(HTTP協議、請求響應)&#xff0c;并且也講解了數據庫MySQL&#xff0c;以及通過Mybatis框架如何來完成數據庫的基本操作。 那接下來&#xff0c;我們就通過一個案例&#xff0c;來將前端開發、后…

【面試題】 Java 三年工作經驗(2025)

問題列表 為什么選擇 spring boot 框架&#xff0c;它與 Spring 有什么區別&#xff1f;spring mvc 的執行流程是什么&#xff1f;如何實現 spring 的 IOC 過程&#xff0c;會用到什么技術&#xff1f;spring boot 的自動化配置的原理是什么&#xff1f;如何理解 spring boot 中…

JAVA 接口、抽象類的關系和用處 詳細解析

接口 - Java教程 - 廖雪峰的官方網站 一個 抽象類 如果實現了一個接口&#xff0c;可以只選擇實現接口中的 部分方法&#xff08;所有的方法都要有&#xff0c;可以一部分已經寫具體&#xff0c;另一部分繼續保留抽象&#xff09;&#xff0c;原因在于&#xff1a; 抽象類本身…

ResNeSt: Split-Attention Networks論文學習筆記

這張圖展示了一個名為“Split-Attention”的神經網絡結構&#xff0c;該結構在一個基數組&#xff08;cardinal group&#xff09;內進行操作。基數組通常指的是在神經網絡中處理的一組特征或通道。圖中展示了如何通過一系列操作來實現對輸入特征的注意力機制。 以下是圖中各部…

數據收集后臺服務概要設計

為了幫助大家設計一個數據指標匯總的后端應用&#xff0c;我將提供一個概要設計和表設計的建議。這個設計將基于常見的數據收集需求&#xff0c;假設你需要收集、存儲和匯總來自不同數據源的指標數據。 1. 概要設計 1.1 系統架構 數據收集層&#xff1a;負責從不同數據源&am…

探秘 TCP TLP:從背景到實現

回家的路上還討論了個關于 TCP TLP 的問題&#xff0c;閑著無事縷一縷。本文內容參考自 Tail Loss Probe (TLP): An Algorithm for Fast Recovery of Tail Losses 以及 Linux 內核源碼。 TLP&#xff0c;先說緣由。自 TCP 引入 Fast retrans 機制就是為了盡力避免 RTO&#xf…

設計模式Python版 原型模式

文章目錄 前言一、原型模式二、原型模式示例三、原型管理器 前言 GOF設計模式分三大類&#xff1a; 創建型模式&#xff1a;關注對象的創建過程&#xff0c;包括單例模式、簡單工廠模式、工廠方法模式、抽象工廠模式、原型模式和建造者模式。結構型模式&#xff1a;關注類和對…

一文大白話講清楚webpack進階——5——dev-server原理及其作用

文章目錄 一文大白話講清楚webpack進階——5——dev-server原理及其作用1. webpack的作用2. dev-server的作用3. dev-server的原理3.1 啥是webpack-dev-middleware3.2 HMR 一文大白話講清楚webpack進階——5——dev-server原理及其作用 1. webpack的作用 webpack的作用我們之…