OpenCV圖像數字化

灰度圖像數字化

咱們平時使用PS或者其它圖像處理的軟件打開一個要處理的圖像,當咱們將圖像放大的足夠大的時候咱們會發現不少個灰度程度不一樣的小方格,其中每一個方格就至關於一個像素,水平方向的方格數表明這個圖像的像素寬度(一般在圖像的屬性信息中能夠查看到圖像以像素爲單位的寬度),一樣垂直方向上的方格的個數表明圖像的像素高度。計算機會將每一個方格化爲一個數值- 「位深度」,是將一個方格化爲[0,255]之間的一個uchar類型的數字,用256個數來表示灰度的深淺(0表明黑色,256表明白色),值越小越灰,反之越大越接近白色,就越亮。總之對於計算機數字圖像的處理就是對圖像矩陣的操做。
利用imread的Python API ,能夠將灰度圖像轉化成都ndarry類型,實例以下:數組

import cv2
import numpy as np  
#讀入原始圖像
img=cv2.imread('j1.jpg',cv2.IMREAD_GRAYSCALE)
#灰度化處理
cv2.imshow("1",img);
cv2.waitKey(0)

運行結果:

imread的參數說明:OpenCV2.x和OpenCV3.x的語法不一樣(我已經拋棄2.x了,全部實例均以OpenCV3.x版本爲例),在OpenCV3.x版本中對應的參數是編輯器

參數 OpenCV3.x的解釋
filename 圖像的文件名,能夠包含路徑
flags IMREAD_COLOR: 彩色圖像;IMREAD_GRAYSCALE:灰色圖像;IMREAD_ANYCOLOR:任意圖像

我使用的編輯工具是Anaconda2的Spyder編輯器,正常狀況下會有必定的代碼提示,當忘記完整的參數時能夠根據提示來補全。
對於圖像的灰度化也可使用cv2.cvtColor()函數進行顏色轉換 例如圖像灰度化:
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)函數

彩色圖像數字化

對彩色圖像的理解和對灰色圖像的理解上類似,灰色圖像的每個像素都是有一個數組量化的,二彩色圖像的每個像素都是由三個數字組成的向量量化的,最經常使用的就是用R,G,B三個份量來量化的,這三個元素的值分別表明三種基色:Red、Green、Blue的亮度。假設每種基色的數值量化成m=2的n次方,如同8爲灰度圖像同樣,將灰度量化成2的8次方=256個數。RGB圖像的紅綠藍三個通道的圖像都是一張8位圖,所以顏色的總數是256的3次方=16777216,如(0,0,0)表明黑色,(255,255,255)表明白色,(255,0,0)表明紅色,(0,0,255)表明藍色。
下面將RGB彩色圖轉換爲三維的ndarray工具

import cv2
import numpy as np
import sys

#讀入原始圖像
image=cv2.imread('j1.jpg',cv2.IMREAD_COLOR)
#獲得三個顏色通道
b = image[:,:,0]
g = image[:,:,1]
r = image[:,:,2]
#顯示三個顏色通道
cv2.imshow('b',b)
cv2.imshow('g',g)
cv2.imshow('r',r)
cv2.waitKey(0)
cv2.destroyAllWindows()

運行結果:


3d

擴展

提到cv2.cvtColor()函數我就在這裏插入點「有趣的東西」 這個函數能夠實現好多種變化,首先咱們要知道圖像處理中有多種色彩空間,例如 RGB、HLS、HSV、HSB、YCrCb、CIE XYZ、CIE Lab 等。下面對日常用到的顏色空間簡單介紹下:code

  • RGB (Red 紅色,Green 綠色,Blue 藍色),可用於表示大部分顏色,也是圖像處理中最基本、最經常使用、面向硬件的顏色空間,是一種光混合的體系.
  • LAB (L 亮度,A 綠色到紅色的份量, B 藍色到黃色的份量)顏色空間由一個亮度通道和兩個顏色通道組成的。LAB 相較於RGB與CMYK等顏色空間更符合人類視覺,也更容易調整:想要調節亮度,就調節L 通道,想要調節只色彩平衡就分別調 A 和 B。L 越大,亮度越高(L爲0時是黑色),A 和 B 爲0時都表明灰色,在實際應用中經常將顏色通道的範圍[-100, +100]或[-128, 127]之間。
  • HSI (H 色相,S 飽和度,I 亮度) HSI顏色模式中的色調使用顏色類別表示,飽和度與顏色的白光光亮亮度恰好成反比,表明灰色與色調的比例,亮度是顏色的相對明暗程度.
    下面是一個綜合運用的實例:
from matplotlib import pyplot as plt
import cv2

img_BGR = cv2.imread('j1.jpg') # BGR 
plt.subplot(3,3,1)
plt.imshow(img_BGR);plt.axis('off');plt.title('BGR')

img_RGB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2RGB)
plt.subplot(3,3,2)
plt.imshow(img_RGB);plt.axis('off');plt.title('RGB')
    
img_GRAY = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2GRAY)
plt.subplot(3,3,3);
plt.imshow(img_GRAY);plt.axis('off');plt.title('GRAY')
    
img_HSV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HSV)
plt.subplot(3,3,4)
plt.imshow(img_HSV);plt.axis('off');plt.title('HSV')
    
img_YcrCb = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YCrCb)
plt.subplot(3,3,5)
plt.imshow(img_YcrCb);plt.axis('off');plt.title('YcrCb')
    
img_HLS = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HLS)
plt.subplot(3,3,6)
plt.imshow(img_HLS);plt.axis('off');plt.title('HLS')
    
img_XYZ = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2XYZ)
plt.subplot(3,3,7)
plt.imshow(img_XYZ);plt.axis('off');plt.title('XYZ')
    
img_LAB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2LAB)
plt.subplot(3,3,8)
plt.imshow(img_LAB);plt.axis('off');plt.title('LAB')
    
img_YUV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YUV)
plt.subplot(3,3,9)
plt.imshow(img_YUV);plt.axis('off');plt.title('YUV')
plt.show()

運行結果:
blog

相關文章
相關標籤/搜索