咱們平時使用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
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