1. 顏色轉換
import cv2
import matplotlib.pyplot as plotimg = cv2.imread("tmp.jpg")
img_r = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img_g = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_h = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
img_l = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)plot.figure(figsize=(15,3));
plot.subplot(1,5,1)
plot.title('BGR image')
plot.imshow(img)
plot.subplot(1,5,2)
plot.title('BGR to RGB')
plot.imshow(img_r)
plot.subplot(1,5,3)
plot.title('BGR to Gray')
plot.imshow(img_g)
plot.subplot(1,5,4)
plot.title('BGR to HSV')
plot.imshow(img_h)
plot.subplot(1,5,3)
plot.title('BGR to LAB')
plot.imshow(img_l)plot.show()
2. 各顏色空間對比
顏色空間 | 通道數 | 通道含義 | 數據范圍 | 主要應用場景 | 優缺點 |
---|---|---|---|---|---|
RGB | 3 | Red(紅)、Green(綠)、Blue(藍) | 各通道值范圍:0-255 | 圖像顯示、基礎圖像處理 | ? 直觀易用 ? 對光照變化敏感 |
BGR | 3 | Blue(藍)、Green(綠)、Red(紅) | 各通道值范圍:0-255 | OpenCV默認圖像格式、視頻處理 | ? OpenCV原生支持 ? 與常規RGB順序相反 |
Gray | 1 | 亮度(Luminance) | 單通道值范圍:0-255 | 人臉檢測、文字識別、簡化計算 | ? 計算效率高 ? 丟失顏色信息 |
HSV | 3 | Hue(色相)、Saturation(飽和度)、Value(明度) | H: 0-180 S/V: 0-255 | 顏色檢測、色彩分割、光照魯棒處理 | ? 顏色分離效果好 ? H通道是循環角度值(0°=180°) |
Lab | 3 | L(亮度)、a(紅綠軸)、b(黃藍軸) | L: 0-255 a/b: -128~127 | 顏色一致性校正、復雜顏色分割 | ? 接近人類視覺感知 ? 計算復雜度較高 |
3. 應用說明
3.1 RGB vs BGR
- OpenCV默認使用BGR格式,與其他庫(如Matplotlib)交互時需轉換
- 轉換方法:cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
3.2 HSV
- H(色相)在OpenCV中被壓縮到0-180范圍(常規為0-360°)
- 常用于顏色過濾(如檢測紅色物體)
3.3 Lab
- L通道表示亮度,與設備無關
- a通道:綠色→紅色(-128→127)
- b通道:藍色→黃色(-128→127)
- 在Photoshop等專業工具中廣泛使用
3.4 Gray
- 轉換公式:Gray = 0.299R + 0.587G + 0.114*B(加權平均法)
3.5 典型使用場景示例:
- 人臉檢測:優先使用灰度圖(減少計算量)
- 顏色追蹤:HSV空間定義顏色范圍(如cv2.inRange())
- 圖像增強:Lab空間調整亮度(L通道)不影響顏色
- 跨設備顏色一致性:Lab空間進行顏色校正