圖像灰度化
圖像灰度化是將一幅彩色圖像轉換為灰度化圖像的過程。彩色圖像通常包括R帚屉、G谜诫、B三個分量,分別顯示出紅綠藍等各種顏色涮阔,灰度化就是使彩色圖像的R漾唉、G处硬、B三個分量相等的過程《痉眩灰度圖像中每個像素僅具有一種樣本顏色牺陶,其灰度是位于黑色與白色之間的多級色彩深度伟阔,灰度值大的像素點比較亮,反之比較暗掰伸,像素值最大為255(表示白色)皱炉,像素值最小為0(表示黑色)
常見灰度處理算法如下表所示:
在圖像處理過程中,常常需要用到灰度圖像狮鸭、二值圖像合搅、HSV、HSI等顏色歧蕉,OpenCV提供了cvtColor()函數實現這些功能灾部。
dst = cv2.cvtColor(src, code[, dst[, dstCn]])
- src表示輸入圖像,需要進行顏色空間變換的原圖像
- dst表示輸出圖像惯退,其大小和深度與src一致
- code表示轉換的代碼或標識
- dstCn表示目標圖像通道數赌髓,其值為0時,則有src和code決定
該函數的作用是將一個圖像從一個顏色空間轉換到另一個顏色空間催跪,其中锁蠕,RGB是指Red、Green和Blue懊蒸,一副圖像由這三個通道(channel)構成荣倾;Gray表示只有灰度值一個通道;HSV包含Hue(色調)骑丸、Saturation(飽和度)和Value(亮度)三個通道舌仍。在OpenCV中妒貌,常見的顏色空間轉換標識包括CV_BGR2BGRA
、CV_RGB2GRAY
抡笼、CV_GRAY2RGB
苏揣、CV_BGR2HSV
、CV_BGR2XYZ
推姻、CV_BGR2HLS
等
import cv2
import numpy as np
import matplotlib.pyplot as plt
#讀取原始圖像
img_BGR = cv2.imread('data/test3.jpg')
#BGR轉換為RGB
img_RGB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2RGB)
#灰度化處理
img_GRAY = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2GRAY)
#BGR轉HSV
img_HSV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HSV)
#BGR轉YCrCb
img_YCrCb = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YCrCb)
#BGR轉HLS
img_HLS = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HLS)
#BGR轉XYZ
img_XYZ = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2XYZ)
#BGR轉LAB
img_LAB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2LAB)
#BGR轉YUV
img_YUV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YUV)
#調用matplotlib顯示處理結果
titles = ['BGR', 'RGB', 'GRAY', 'HSV', 'YCrCb', 'HLS', 'XYZ', 'LAB', 'YUV']
images = [img_BGR, img_RGB, img_GRAY, img_HSV, img_YCrCb, img_HLS, img_XYZ, img_LAB, img_YUV]
plt.figure(figsize=(10, 10))
for i in range(9):
plt.subplot(3, 3, i + 1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()