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()

運行結果:


擴展##

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

  • 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()

運行結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM