python--opencv-圖像色彩轉換


灰度是指把白色與黑色之間按對數關系分為若干個等級,一般我們將灰度分為256階(0-255)。用灰度表示的圖像就叫做灰度圖。

一幅完整的圖像是由紅色、綠色、藍色三個通道組成的,顏色通道一般有RGB和bgr兩種,其中OpenCV中采用的顏色通道模式為bgr模式。
事實上,b(藍色)、g(綠色)、r(紅色)三個通道的縮覽圖都是以灰度顯示的,當我們用不同的灰度色階來表示b、g、r三個通道在圖像中的比重,並將它們組合在一起時,就形成了一幅完整的圖像。

通道中的純白,代表了該色光在此處為最高亮度,亮度級別為255。同理,通道中的純黑為最低亮度,亮度級別為0

圖像的灰度處理就是對圖像進行灰度化的過程,簡單來說,就是將圖像顏色從三通道變為單通道。在bgr模型中,如果b=g=r,那么表示的就是一種灰度顏色,其中b=g=r的值叫做灰度值(或叫做強度值、亮度值)。因此,灰度圖像中的每個像素只需要一個字節來存放灰度值,其中灰度范圍為0-255。

關於圖像的灰度處理,其實我們在之前的章節中已經有用到過了。我們在讀取圖像數據時使用imread(filename,flags=None)函數,該函數接收兩個參數,第一個參數為圖像名稱,第二個參數為圖像讀取方式。當flags傳入1時,讀取的為原圖像,即具有三個顏色通道的彩色圖;而當lags傳入的是0時,讀取的便是原圖像的灰度圖。

import cv2    #導入opencv庫
import numpy as np

img = cv2.imread("3.jpg",1)  #讀取一張圖片,彩色
dst=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #顏色空間轉換
'''
opencv中有多種色彩空間,包括 RGB、HSI、HSL、HSV、HSB、YCrCb、CIE XYZ、CIE Lab8種,使用中經常要遇到色彩空間的轉化,以便生成mask圖等操作
參數1 必選參數,待轉換的原圖像數據
參數2 必選參數。用於設置轉換的代碼或標識,確定從何種圖像格式轉換為另一種圖像格式
    cv2.COLOR_BGR2RGB 將BGR格式轉換成RGB格式
    cv2.COLOR_BGR2GRAY 將BGR格式轉換成灰度圖片
    cv2.COLOR_BGR2HSV 從RGB轉到HSV夜色空間
    看下表
參數3 可選參數。表示輸出圖像,即轉換后的目標圖像數據。默認大小與形狀同原圖像保持一致
參數4 可選參數。用於設置目標圖像通道數,默認取值為0,表示由參數1和參數2決定。
'''
print(dst.shape)
cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.waitKey()  #窗口等待任意鍵盤按鍵輸入,0為一直等待,其他數字為毫秒數

參數2 代碼:

 

 效果圖:

 

圖像灰度處理方法:

圖像灰度化就是將bgr模式的三通道顏色轉換為b=g=r的單通道顏色。因此,圖像的灰度化其實就是求取b=g=r=x中的x值。常用的方法有分量法、最大值法、平均值法和加權平均法四種方法對彩色圖像進行灰度化

分量法:

分量法指的是將彩色圖像中的b(藍色)、g(綠色)、r(紅色)三分量的亮度作為三個灰度圖像的灰度值,分別產生藍色分量灰度圖、綠色分量灰度圖和紅色分量灰度圖,然后根據應用需求選取其中一種分量灰度圖作為灰度圖像

最大值法:

最大值法顧名思義就是將彩色圖像中的b(藍色)、g(綠色)、r(紅色)三分量中的最大值作為灰度圖的灰度值,即將灰度圖的灰度設置為max(b,g,r)

平均值法:

平均值法與最大值法類似,取的是b(藍色)、g(綠色)、r(紅色)三分量的平均值,即將灰度圖的灰度設置為(b+g+r)/3

加權平均法:

加權平均法是圖像灰度處理用的比較多的一種實現方法,也是OpenCV默認的灰度處理方法。加權平均法會根據重要性及其它相關指標,將三個分量以不同的權值進行加權平均。由於人眼對綠色的敏感度最高,對藍色的敏感度最低,因此,按下式對RGB三分量進行加權平均能得到較合理的灰度圖像:
r*0.299+g*0.587+b*0.114(這里保留三位小數)。

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM