OpenCV與影像處理學習二——影像基礎知識(下)
OpenCV與影像處理學習二——影像基礎知識(下)
本次學習筆記是對上次筆記的續寫,一次寫太多看起來也累。。
上次筆記的連線:OpenCV與影像處理學習一——影像基礎知識(上)
2.4 影像直方圖(Image Histogram)
用以表示數字影像中亮度分佈的直方圖,標繪了影像中每個亮度值的畫素數。橫座標左側為純黑、較暗區域,右側為純白、較亮區域。
如下圖所示,兩幅圖的右上角都繪製了它們各自的影像直方圖:
意義:是影像中畫素強度分佈的圖形表達方式。它統計了每個強度值所具有的畫素個數。CV領域藉助影像直方圖來實現影像的二值化。
2.4.1 直方圖的繪製
函式:
cv.calcHist( images, channels, mask, histSize, ranges[, hist[, accumulate]] )
引數:
- images:待統計影像,需用中括號括起來。
- channels:待統計的通道。
- mask:這裡沒用到,暫時不知道幹啥的。
- histSize:表示直方圖分成多少份。
- ranges:表示直方圖中各個畫素的值,灰度值範圍。
先來看一下單通道的統計:
from matplotlib import pyplot as plt
import cv2
import numpy as np
img = cv2.imread('girl.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
plt.imshow(img_gray, cmap=plt.cm.gray)
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
plt.figure()
plt.title("Grayscale Histogram")
plt.xlabel("Bins")
plt.ylabel("# of Pixels")
plt.plot(hist)
plt.xlim([0, 256])
plt.show()
這裡只統計了第一個通道的直方圖,結果如下所示:
2.4.2 三通道直方圖繪製
看一下三個通道的例子:
from matplotlib import pyplot as plt
import cv2
girl = cv2.imread("girl.jpg")
cv2.imshow("girl", girl)
color = ("b", "g", "r")
#使用for迴圈遍歷color列表,enumerate列舉返回索引和值
for i, color in enumerate(color):
hist = cv2.calcHist([girl], [i], None, [256], [0, 256])
plt.title("girl")
plt.xlabel("Bins")
plt.ylabel("num of perlex")
plt.plot(hist, color = color)
plt.xlim([0, 260])
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()
看一下結果:
由此可見,三通道的彩色圖裡的畫素值的分佈是不一樣的。
2.5 顏色空間
顏色空間也稱彩色模型/彩色空間/彩色系統,用途是在某些標準下用通常可接受的方式對彩色加以說明。
常見的顏色空間有RGB、HSV、HSI以及CMYK,下面分別來看一下。
2.5.1 RGB顏色空間
主要用於計算機圖形學中,依據人眼識別的顏色建立,影像中每一個畫素都具有R、G、B三個顏色分量組成,均屬於[0,255]。通常表示某個顏色時,寫成一個3維向量形式(110,150,130)。
RGB顏色模型:
- 原點對應的顏色為黑色,三分量均為0。
- 距離原點最遠的頂點對應顏色為白色,三分量均為1。
- 從黑色到白色的灰度值分佈在這兩點的連線上,該虛線稱為灰度線。
- 立方體其餘各點對應不同顏色,即三原色紅、綠、藍及其混合色黃、品紅、青色。
2.5.2 HSV顏色空間(Hue、Saturation、Value)
根據顏色直觀特性由A.R.Smith在1978年建立的一種顏色空間,引數分別是:色調(Hue)、飽和度(Saturation)、明度( Value)。
HSV顏色模型:
- H通道:Hue,色調/色彩,代表顏色,0°對應紅色,120°對應綠色,240°對應藍色。
- S通道:Saturation,飽和度,取值範圍:0%~100%,值越大,越飽和。
- V通道:Value,明暗,數值越大越亮,0%(黑)到100%(白)。
RGB空間與HSV空間轉化:
import cv2
# 色彩空間轉換函式
def color_space_demo(image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('gray', gray)
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# print(hsv)
cv2.imshow('hsv', hsv)
# 讀入一張彩色圖
src = cv2.imread('girl.jpg')
cv2.imshow('before', src)
# 呼叫color_space_demo函式進行色彩空間轉化
color_space_demo(src)
cv2.waitKey(0)
cv2.destroyAllWindows()
結果如下所示:
2.5.3 HSI
由美國色彩學家孟塞爾於1915年提出,它反映了人視覺系統感知彩色的方式,以色調、飽和度和強度三種基本特徵量來感知顏色,即把HSV中的明度換成了強度I。
HSI顏色模型:
模型優點:
- 在處理彩色影像時,可僅對I分量進行處理,結果不改變原影像中的彩色種類。
- HSI模型完全反映了人感知顏色的基本屬性,與人感知顏色的基本屬性,與人感知顏色的結果一一對應。
2.5.4 CMYK(Cyan、Magenta、Yellow、black)
應用於印刷工業,印刷業通過青(C)、品(M)、黃(Y)三原色油墨的不同網點面積率的疊印來表現豐富多彩的顏色和階調,這便是三原色的CMY顏色空間。
相關文章
- 影像處理的基礎知識(5)——繪製影像(1)
- 影像處理的基礎知識(9)——編輯與修飾影像(1)
- 影像處理的基礎知識(14)——通道與蒙版
- 影像處理的基礎知識(11)——圖層(1)
- 深度學習之影像處理與分析(二)深度學習
- 影像處理的基礎知識(2)——建立與編輯選取(1)
- 影像處理的基礎知識(3)——建立與編輯選取(2)
- OpenCV(影像NaN處理)OpenCVNaN
- OpenCV影像處理學習筆記-Day1OpenCV筆記
- Python 影像處理 OpenCV (6):影像的閾值處理PythonOpenCV
- Python 影像處理 OpenCV (7):影像平滑(濾波)處理PythonOpenCV
- 【scipy 基礎】--影像處理
- Python 影像處理 OpenCV (15):影像輪廓PythonOpenCV
- 基於Opencv的簡單影像處理OpenCV
- Python 影像處理 OpenCV (16):影像直方圖PythonOpenCV直方圖
- openCV中的影像處理 3 影像閾值OpenCV
- Python 影像處理 OpenCV (14):影像金字塔PythonOpenCV
- 【影像處理】基於OpenCV實現影像直方圖的原理OpenCV直方圖
- 影像處理基礎篇(一)
- 【傳統影像處理】1 數字影像基礎
- Python 影像處理 OpenCV (2):畫素處理與 Numpy 操作以及 Matplotlib 顯示影像PythonOpenCV
- Python 影像處理 OpenCV (10):影像處理形態學之頂帽運算與黑帽運算PythonOpenCV
- Python 影像處理 OpenCV (5):影像的幾何變換PythonOpenCV
- Python 影像處理 OpenCV (3):影像屬性、影像感興趣 ROI 區域及通道處理PythonOpenCV
- Python 影像處理 OpenCV (1):入門PythonOpenCV
- OpenCV3影像處理筆記OpenCV筆記
- 音視訊基礎知識-YUV影像
- Python 影像處理 OpenCV (9):影像處理形態學開運算、閉運算以及梯度運算PythonOpenCV梯度
- OpenCV4影像處理--影像查詢表和顏色表OpenCV
- C#處理醫學影像(二):基於Hessian矩陣的醫學影像增強與窗寬窗位C#矩陣
- [Python影象處理] 一.影象處理基礎知識及OpenCV入門函式PythonOpenCV函式
- 影像處理--影像特效特效
- 圖形影像處理之繪圖基礎繪圖
- 數字影像處理--認識影像各種概念
- 處理器基礎知識
- OpenCV計算機視覺學習(12)——影像量化處理&影像取樣處理(K-Means聚類量化,區域性馬賽克處理)OpenCV計算機視覺聚類
- Python影像處理初探:Pillow庫的基礎使用Python
- 形態學影像處理