在介紹影像著色原理之前,先介紹一下opencv的顏色空間
目前基于opencv實作影像原理中定義的顏色空間分為三種:
RGB
RGB就是常說的光學三原色,R代表Red(紅色),G代表Green(綠色),B代表Blue(藍色),取值范圍在[0,255],自然界中肉眼所能看到的任何色彩都可以由這三種色彩混合疊加而成,因此也稱為加色模式,

import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False # 解決保存影像是負號'-'顯示為方塊的問題
image='color.jpg'
img=cv2.imread(image,cv2.IMREAD_COLOR)
b,g,r=cv2.split(img)
img2=cv2.merge([r,g,b])
img_b=img[:,:,0]
img_g=img[:,:,1]
img_r=img[:,:,2]
plt.figure(figsize=(12,8))
plt.subplot(2,2,1)
plt.imshow(img2)
plt.title('原始影像')
plt.axis('off')
plt.subplot(2,2,2)
plt.imshow(img_b)
plt.title("B")
plt.axis('off')
plt.subplot(2,2,3)
plt.imshow(img_g)
plt.title("G")
plt.axis('off')
plt.subplot(2,2,4)
plt.imshow(img_r)
plt.title("R")
plt.axis('off')
plt.show()

為了解決matplotlib中文亂碼問題
#window
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 指定默認字體
#mac
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] # 指定默認字體
plt.rcParams['axes.unicode_minus'] = False # 解決保存影像是負號'-'顯示為方塊的問題
opencv讀取圖片是BGR格式,matplotlib展示要RGB格式,所以需要對影像進行通道轉換
HSV
- 色調H:用角度度量,取值范圍為0°~360°,從紅色開始按逆時針方向計算,紅色為0°,綠色為120°,藍色為240°,它們的補色是:黃色為60°,青色為180°,紫色為300°;
- 飽和度S:飽和度S表示顏色接近光譜色的程度,一種顏色,可以看成是某種光譜色與白色混合的結果,其中光譜色所占的比例愈大,顏色接近光譜色的程度就愈高,顏色的飽和度也就愈高,飽和度高,顏色則深而艷,光譜色的白光成分為0,飽和度達到最高,通常取值范圍為0%~100%,值越大,顏色越飽和,
- 明度V:明度表示顏色明亮的程度,對于光源色,明度值與發光體的光亮度有關;對于物體色,此值和物體的透射比或反射比有關,通常取值范圍為0%(黑)到100%(白)

import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False # 解決保存影像是負號'-'顯示為方塊的問題
image='color.jpg'
img=cv2.imread(image,cv2.IMREAD_COLOR)
b,g,r=cv2.split(img)
img2=cv2.merge([r,g,b])
img_hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
img_h=img_hsv[:,:,0]
img_s=img_hsv[:,:,1]
img_v=img_hsv[:,:,2]
plt.figure(figsize=(12,8))
plt.subplot(2,2,1)
plt.imshow(img2)
plt.title('原始影像')
plt.axis('off')
plt.subplot(2,2,2)
plt.imshow(img_h)
plt.title("H")
plt.axis('off')
plt.subplot(2,2,3)
plt.imshow(img_s)
plt.title("S")
plt.axis('off')
plt.subplot(2,2,4)
plt.imshow(img_v)
plt.title("V")
plt.axis('off')
plt.show()

Lab
Lab顏色模型由三個要素組成
- L:代表亮度,范圍在[0,100],0時代表黑色,100時代表白色
- a:a包括的顏色是從深綠色(低亮度值)到灰色(中亮度值)再到亮粉紅色(高亮度值),范圍是從負數變到正數,對應顏色從綠色變到紅色,取值[-128,+127],其中值為0時,為灰色,
- b :b是從亮藍色(低亮度值)到灰色(中亮度值)再到黃色(高亮度值),范圍是從負數變到正數,對應顏色從藍色變到黃色,取值[-128,+127],其中值為0時,為灰色,

import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False # 解決保存影像是負號'-'顯示為方塊的問題
image='color.jpg'
img=cv2.imread(image,cv2.IMREAD_COLOR)
b,g,r=cv2.split(img)
img2=cv2.merge([r,g,b])
img_lab=cv2.cvtColor(img,cv2.COLOR_BGR2LAB)
img_l=img_lab[:,:,0]
img_a=img_lab[:,:,1]
img_b=img_lab[:,:,2]
plt.figure(figsize=(12,8))
plt.subplot(2,2,1)
plt.imshow(img2)
plt.title('原始影像')
plt.axis('off')
plt.subplot(2,2,2)
plt.imshow(img_l)
plt.title("L")
plt.axis('off')
plt.subplot(2,2,3)
plt.imshow(img_a)
plt.title("A")
plt.axis('off')
plt.subplot(2,2,4)
plt.imshow(img_b)
plt.title("B")
plt.axis('off')
plt.show()

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/291955.html
標籤:其他
