opencv裏面直方圖的意義

什麼是直方圖
直方圖是一種圖表類型,在計算機視覺領域通常用來指反映圖片的亮度,色彩,強度在整個圖片裏面的分佈情況。直方圖我們可以理解成另一種理解圖片的方式。
直方圖可以是彩色的圖片,也可以是灰度圖,直方圖的X軸的範圍是(0-255),Y軸則是不同像素值上,像素的數量,如果是彩色的圖片Y軸則會有R,G,B三種像素展示,如果是灰度值則只有一種像素展示。

一些術語
BINS: 默認情況直方圖是顯示0-255範圍內每個像素值的像素的數量,當然我們也可以設置一個個區間來統計這個區間內的像素值的數量,比如(0-15),(16-31),(240-255) 例子連接 這裏面的16個單獨的區間都可以叫做一個BIN(英文箱子的意思)
DIMS: 維度,它代表收集顏色通道的個數,如果是灰度圖這個值就是1,如果一個彩色圖那麼DIMS就是3
RANGE: 代表你想測量亮度的範圍,正常下是[0-255]代表所有的像素值

使用方法
直方圖可以通過opencv的內置的函數來展示,也可以通過numpy的函數來展示,這裏推薦使用numpy來打印直方圖,opencv內置的方法代碼比較長,所以大多數時候都建議使用numpy的函數來展示,代碼如下:
 
 
# - * - coding : utf -8 - * - import matplotlib . pyplot as plt import numpy as np import cv2 as cv "" " 打印一個灰度圖片的直方圖 "" " img = cv . imread ( 'E:\\tmp\\cat.jpg' ) cv . imshow ( "orgin" , img ) def gray_histogram ( ) : "" " 灰度圖 : return : "" " # ravel方法代表返回一個連續扁平化的數組 # hist參數:數組,bin數量,像素值範圍 gray = cv . cvtColor ( img , cv . COLOR_BGR2GRAY ) plt . hist ( gray . ravel ( ) , 256 , [ 0 , 256 ] ) def color_histogram ( ) : "" " 彩色圖 : return : "" " # 藍 綠 紅 color = ( 'b' , 'g' , 'r' ) for i , col in enumerate ( color ) : histr = cv . calcHist ( [ img ] , [ i ] , None , [ 256 ] , [ 0 , 256 ] ) plt . plot ( histr , color = col ) plt . xlim ( [ 0 , 256 ] ) gray_histogram ( ) # color_histogram ( ) plt . show ( ) cv . waitKey ( 0 )
(1)原圖

添加描述

(2)灰度直方圖

添加描述

(3)彩色直方圖

添加描述

直方圖的意義
在計算機視覺領域,常常要處理各種各樣的圖片,通過觀察圖片的直方圖,可以使我們在加工圖片時更加合理的調整一些函數的參數,比如邊緣檢測,高斯模糊,切割,透視,二值化等等。
參考文檔: