OpenCV與影像處理學習二——影像基礎知識(下)

slight smile發表於2020-10-11

本次學習筆記是對上次筆記的續寫,一次寫太多看起來也累。。
上次筆記的連線:OpenCV與影像處理學習一——影像基礎知識(上)

2.4 影像直方圖(Image Histogram)

用以表示數字影像中亮度分佈的直方圖,標繪了影像中每個亮度值的畫素數。橫座標左側為純黑、較暗區域,右側為純白、較亮區域。

如下圖所示,兩幅圖的右上角都繪製了它們各自的影像直方圖:
在這裡插入圖片描述
意義:是影像中畫素強度分佈的圖形表達方式。它統計了每個強度值所具有的畫素個數。CV領域藉助影像直方圖來實現影像的二值化。

2.4.1 直方圖的繪製

函式:

cv.calcHist( images, channels, mask, histSize, ranges[, hist[, accumulate]]	)

引數:

  1. images:待統計影像,需用中括號括起來
  2. channels待統計的通道
  3. mask:這裡沒用到,暫時不知道幹啥的。
  4. histSize:表示直方圖分成多少份。
  5. 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顏色空間。

在這裡插入圖片描述

相關文章