[python opencv 計算機視覺零基礎到實戰] 四、了解色彩空間及其詳解

一、學習目標

  1. 了解什么是色彩空間
  2. 了解opencv中色彩空間的轉換

目錄

[python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld

[【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld

[[python opencv 計算機視覺零基礎到實戰] 三、numpy與圖像編輯] 一、opencv的helloworld

[[python opencv 計算機視覺零基礎到實戰] 四、了解色彩空間及其詳解] 一、opencv的helloworld

[[python opencv 計算機視覺零基礎到實戰] 五、對象追蹤] 一、opencv的helloworld
如有錯誤歡迎指出~

二、了解OpenCV中常見的色彩空間

2.1 什么是色彩空間

色彩空間又可以叫做色域,英文是Color Sapce,是一種人為建立,用于表示色彩的一種“坐標系統”,或者說是一種色彩訪問的取值系統,用于描述色彩。了解色彩空間對我們今后使用opencv進行圖像處理很重要,在今后對圖像處理時將會涉及到色彩空間的內容,所以學習了解色彩空間是有必要的。

2.2 RGB顏色空間

首先我們了解RGB顏色空間,RGB顏色空間常用于顯示器。我們在之前的學習中,已經了解了計算機中的圖片也是由RGB值進行描述的。RGB利用了三種物理學中的三原色,相互進行疊加融合,生成各式各樣的顏色,最終構成一張多彩圖像。

在RGB中,三種顏色每種都有一個通道,并且值小,則越黑,值大則越亮。我們在之前的學習中,通過實踐已經知道通道都為0則為黑,通道都為255則為白,取中間值147則為灰,這也是由于“值小,則越黑,值大則越亮”這個原因。

RGB色彩空間用一個正方體進行描述,這個正方體是笛卡爾積。笛卡爾積是指兩個集合進行相乘而得到的所有有可能的序列,這個序列用笛卡爾坐標系進行表示。由于在opencv中,RGB的數據類型為uint8,那么就可以有256256256=16777216種顏色,這些顏色都在這個笛卡爾坐標系中進行表示。

以下是RGB的色彩空間圖,圖片來源于網絡。

以上圖只能查看一面,其實在該立方體中,有3個定點表示三原色,也就是紅、綠、藍;還有3個頂點表示品紅、黃以及青;與原點(0,0)距離最遠的頂點顏色為白色,其中灰度則為黑色頂點與白色頂點形成的連線的橫縱豎坐標數值大小相等的位置。

2.3 HSV顏色空間

HSV顏色空間是一種表示色調、飽和度以及亮度的顏色空間,其中H(hue)指的是色調,就是平常一些顏色,如黃色、綠色、紅色等;S(saturation)指的是飽和度、V(value)指的是亮度。HSV是一種更接近于人類感知的一種顏色空間,它是根據人對色彩的觀察從而產生的。

其中H色調是描述純色,S飽和度是與白光疊加后的描述。

以下是HSV的色彩空間圖,圖片來源于網絡。

從圖中得知,色調Hue的取值為0到360,但是在opencv中取值為0-180,這點是有一定區別;S飽和度S取值范圍為0.0~1.0,在opencv中取值為0-255;V亮度取值范圍為0.0-1.0,在opencv在opencv中取值為0-255,0則是為黑,255則是為白。從圖中我們可以得知,Value值越小則越黑,Hue則是色彩范圍,S則是值越大顏色更加純。

有一個與HSV非常相似的色彩空間,名為HSL。HSL中的L則表示為Lightness,兩者類似在此不做過多講解。

2.4 YUV顏色空間

YUV是一種色彩的編碼方式,其中Y表示明亮度、U是色度、V是濃度,U和V決定了顏色。YUV一般用于優化視頻信號,如彩色視頻信號的傳輸,使信號能夠與老式的黑白電視進行兼容,并且可以在傳輸時極大的減少頻寬。

以下是YUV的色彩空間圖,圖片來源于網絡。

2.5 opencv 色彩空間的相互轉換

在opencv中,提供了圖像對于不同色彩空間的轉換方法,我們可以通過這些方法對圖像進行不同色彩空間的轉化。首先我們需要讀取一張圖片。代碼如下:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')
cv2.namedWindow("Image",cv2.WINDOW_AUTOSIZE)
cv2.imshow("Image", img)

隨后我們通過cvColor方法對圖片進行不同色彩空間的轉換。cvColor方法接收4個參數,在此講解此節所用到的2個參數,這兩個參數分別是src與dst;src指輸入的圖像,類型為Array;dst指輸入的圖像需要轉換成的色彩空間。我們首先嘗試將改圖片轉換為HSV色彩空間圖。COLOR_BGR2HSV為轉換為HSV色彩空間。我們在以上代碼末行加入以下代碼:

hsvImage=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.imshow("hsvImage", hsvImage)
cv2.waitKey (0)
cv2.destroyAllWindows()

我們接著添加轉換各個色彩空間,查看效果,整體代碼如下:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)
cv2.namedWindow("hsvImage",cv2.WINDOW_NORMAL)
cv2.namedWindow("COLOR_BGR2YUV",cv2.WINDOW_NORMAL)
cv2.namedWindow("COLOR_BGR2GRAY",cv2.WINDOW_NORMAL)hsvImage=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#BGR to HSV
COLOR_BGR2YUV=cv2.cvtColor(img,cv2.COLOR_BGR2YUV)#BGR to YUV
COLOR_BGR2GRAY=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#BGR to GRAYcv2.imshow("Image", img)
cv2.imshow("hsvImage", hsvImage)
cv2.imshow("YUV", COLOR_BGR2YUV)
cv2.imshow("GRAY", COLOR_BGR2GRAY)cv2.waitKey (0)
cv2.destroyAllWindows()

運行結果如下:
GRAY灰度:

HSV:

YUV:

該系列文章首發于易百納

三、總結

  1. 了解色彩空間是一種對色彩的描述標準
  2. 了解常見色彩空間RGB、HSV、YUV
  3. 了解使用opencv對圖片實現不同色彩空間的轉換
  4. 了解了色彩空間各個取值對色彩的影響

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

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

相關文章

java gui 按鍵 數組_java GUI分配數組值

好的,所以這是一個非常基本的例子.它需要更多的工作和優化,但應該讓你朝著正確的方向前進import java.awt.Color;import java.awt.Dimension;import java.awt.EventQueue;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Point;import java.awt.Shape;im…

Android之如何實現阿拉伯版本(RTL)的recycleView的網格布局

1 問題 比如正常的recycleView的網格布局效果如下 1 2 34 5 67 8 現在需要變成這樣的效果 3 2 16 5 48 7 2 思考過程和嘗試解決方法 1)從recycleView上直接分析,看有沒有相關的方法變成這個格式,網上百度了,基本上找不到 2)既然recycleView里面有常見的幾種布局設置,…

poj1189 簡單dp

http://poj.org/problem?id1189 Description 有一個三角形木板,豎直立放。上面釘著n(n1)/2顆釘子,還有(n1)個格子(當n5時如圖1)。每顆釘子和周圍的釘子的距離都等于d,每一個格子的寬度也都等于d,且除了最左端和最右端…

WPF|如何在 WPF 中設計漂亮的社交媒體信息儀表板

1. 效果展示先來直接欣賞效果:2. 準備創建一個WPF工程,比如站長使用 .NET 7[1] 創建名為 Dashboard3 的WPF項目,添加一些圖片資源,項目目錄如下:2.1 圖片資源可在網站 iconfont[2] 下載 關閉、最小化 圖標,…

CentOS 設置服務開機啟動的方法

為什么80%的碼農都做不了架構師?>>> CentOS設置服務開機啟動的兩種方法 1、利用 chkconfig 來配置啟動級別 在CentOS或者RedHat其他系統下,如果是后面安裝的服務,如httpd、mysqld、postfix等,安裝后系統默認不會自動啟…

【ArcGIS風暴】水文分析模塊實驗:山脊線和山谷線提取

實驗平臺:ArcGIS 9.3實驗目的:學習和掌握山脊線和山谷線提取的原理及方法實驗要求:利用ArcGIS水文分析模塊提取樣區的山脊線和山谷線實驗數據:Ex1實驗步驟:1.正負地形的提取 (1)打開Arcmap,加載數據EX1,如圖 (2)平滑處理(均值濾波)。加載Spatial Analyst模塊,單擊…

[python opencv 計算機視覺零基礎到實戰] 五、對象追蹤

一、學習目標 了解為什么色彩空間的轉換那么重要了解opencv中進行對象跟蹤的方法 目錄 [python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld [【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld [[python op…

Android之用glide加載gif圖片靜態展示

1 問題 圖片是gif動圖,我們需要獲取第一幀的靜態圖片并且展示。 2 解決辦法 public void changeGifToPicture(NonNull Context context, NonNull String url, NonNull ImageView imageView) {Glide.with(context).asBitmap().load(url).into(new BitmapImageViewTa…

flex java框架_fleXive——JavaEE框架

fleXive——JavaEE框架fleXive是一個開源的JavaEE框架,基于LGPL許可證,最新版本3.0RC1,它基于EJB3,并帶有補充的JSF組件庫,具有靈活性和可擴展性。它主要致力于企業級(Enterprise-scale)內容建模、存儲和檢索&#xff…

【ArcGIS風暴】在ArcGIS中實現將一個圓16等分

本文實現在ArcGIS中畫一個圓,然后將其16等分。 步驟一:生成圓(多邊形圖層) (1)創建一個點圖層(圖名Center),如果需要精確定位該點,建議通過輸入坐標點的方式來創建,這一步比較簡單,不再詳述; (2)利用Buffer命令創建緩沖區(圖名Circle_2km),因為要處理的對象…

iOS UIViewContentMode 使用詳解

iOS在處理圖片的時候,會出現拉伸變形的情況,可以根據UIViewContentMode的屬性,來控制圖片 UIViewContentMode包含以下枚舉值 UIViewContentModeScaleToFill :拉伸自適應填滿整個視圖 UIViewContentModeScaleAspectFit :自適應打下比例顯示 UIViewContentModeScaleA…

二進制安裝mariadb-10.2.8

centos7.3上二進制安裝mariadb-10.2.8-linux-x86_641、查看是否安裝mariadbrpm -qa mariadb*如果已經安裝就卸載。2、下載mariadb最新版本yum info mariadb官網地址:http://mariadb.org 下載:mariadb-10.2.8-linux-x86_64.tar.gz3、創建mysql用戶rpm 安…

MiniAPI:.NET7 Preview4之MiniAPI更新總覽

一覺醒來,發現微軟帶來了.NET7 Preview4的更新,本次更新關于MiniAPI的還不少,難以掩飾的喜悅心情,促使我盡快把這個消息分享給大家,那下來我們看一下一共帶來了哪些關于MiniAPI的更新:返回值帶來了TypedRes…

[python opencv 計算機視覺零基礎到實戰] 六、圖像運算

一、學習目標 了解opencv中圖像運算的方法了解opencv中圖像運算的運用 如有錯誤歡迎指出~ 二、了解OpenCV中圖像運算的運用 目錄 [python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld [【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭…

Android之SubsamplingScaleImageView加載長圖不能放縮問題

1 問題 第三方開源框架用了這個第三方開源框架(SubsamplingScaleImageView)加載長圖,但是源代碼在有些手機上面不能進行放縮。 private void displayLongPic(Uri uri, SubsamplingScaleImageView longImg) {longImg.setQuickScaleEnabled(tr…

java barrier_Java并發類CyclicBarrier方法詳解

Cyclic是周期的意思,Barrier是關卡的意思。CyclicBarrier不僅有CountDownLatch的功能,還可以實現屏障等待,即階段性同步。因此適用于,需要循環地實現線程一起做任務的目標。CyclicBarrier允許一組線程相互等待,直到到達…

【ArcGIS風暴】實驗:公路建設成本的計算

實驗平臺:ArcGIS 9.3實驗目的:學習和掌握公路建設成本的計算方法實驗要求:熟練掌握如何生成通行成本層、計算成本距離,并學會計算最佳路徑,且對成本距離與直線距離進行比較。實驗數據:ArcEx7實驗步驟:生成通行成本層1.打開Arcmap,加載數據ArcEX7,如圖 2.執行spatial …

[leetcode]347. Top K Frequent Elements

Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2,2,3] and k 2, return [1,2]. Note: You may assume k is always valid, 1 ≤ k ≤ number of unique elements.Your algorithms time complexity must be better th…

合并Spark社區代碼的正確姿勢

原創文章,轉載請保留出處 最近剛剛忙完Spark 2.2.0的性能測試及Bug修復,社區又要發布2.1.2了,國慶期間剛好有空,過了一遍2.1.2的相關JIRA,發現有不少重要修復2.2.0也能用上,接下來需要將有用的PR合到我們內…

.NET 中 GC 的模式與風格

垃圾回收(GC)是托管語言必備的技術之一。GC 的性能是影響托管語言性能的關鍵。我們的 .NET 既能寫桌面程序 (WINFROM , WPF) 又能寫 web 程序 (ASP.NET CORE),甚至還能寫移動端程序。。。不同使用場景的程序對 GC 的風格也有不同的要求&#…