opencv学习笔记21:直方图和掩膜 原理及其应用
直方圖概念
如圖:下面黑色圖為上面圖的直方圖
橫坐標:圖像中各個像素點的灰度級
縱坐標:具有該灰度級的像素個數(shù)。
歸一化直方圖
橫坐標:圖像中各個像素點的灰度級
縱坐標:出現(xiàn)該灰度級的概率。
DIMS:使用參數(shù)的數(shù)量
dims=1:灰度直方圖,僅僅考慮灰度的情況。
還有其他考慮亮度的
BINS:參數(shù)子集的數(shù)目
bins=256: 如灰度是256. 表示0-255
縮小數(shù)字表示將臨近值合并。
RANGE:統(tǒng)計灰度值的范圍,一般為[0-255]
最小值0:黑色
最大值255:白色
直方圖繪制
python+opencv
1.使用matplotlib繪制直方圖
函數(shù):hist(數(shù)據(jù)源,像素級)
數(shù)據(jù)源:圖像,必須是一維數(shù)組
像素級:一般是256,指[0-255]
np.raval()可以實現(xiàn)多維數(shù)組轉(zhuǎn)一維。
import cv2 import matplotlib.pyplot as plt o=cv2.imread("boat.jpg") cv2.imshow("original",o) plt.hist(o.ravel(),256)#o.ravel()將像素數(shù)組轉(zhuǎn)一維 plt.show() cv2.waitKey() cv2.destroyAllWindows()像素直方圖
2.使用opencv繪制直方圖
hist=cv2.calcHist(images,channels,mask,histsize,ranges,accumulate)
hist:直方圖
images:原始圖像,格式[src],需要用中括號括起來
channels:通道,灰色直接[0],BGR對應(yīng)[0],[1],[2]
mask:掩碼圖像。如果一個圖很大,需要計算部分圖的直方圖,需要掩碼。
histsize:BINS的數(shù)量,需要用中括號括起來。一般是[256]
ranges:像素值范圍,一般[0,255]
accumulate:累積標識。可選參數(shù)、默認false,設(shè)為true為計算好幾幅圖的直方圖。
繪制灰度圖像直方圖
不使用掩碼
繪制彩色圖像直方圖
不使用掩膜
注意012,是BGR,非RGB
3.使用掩膜的直方圖
生成掩膜
mask=np.zeros(image.shape,np.unit8)#生成全黑圖像
mask[200:400,200:400]=255#部分取白
把生成的掩膜傳入下列函數(shù)的mask中,即完成。
hist=cv2.calcHist(images,channels,mask,histsize,ranges,accumulate)
原圖
藍色為使用掩膜的直方圖
掩膜處理
黑色為0,其他色為1.將掩膜與原始圖像進行與操作。得到處理結(jié)果。
使用方法
計算結(jié)果=cv2.bitwise_and(原始圖像,掩膜)
bitwise:按位操作
and:與運算
直方圖均衡化
應(yīng)用場合:圖像過亮或者過暗。如車牌識別
理論前提:如果一個圖像占有全部可能的灰度級,并且均勻分布。
結(jié)論:該圖像具有高對比度和多變的灰度色調(diào)。讀取的是灰度圖
外觀:圖像細節(jié)豐富,質(zhì)量更高。
算法
1.計算累積直方圖
2.將累積直方圖進行區(qū)間轉(zhuǎn)換
3.在累積直方圖中,概率相近的原始值,會被處理成相同的值。
1.計算累積直方圖
2.將累積直方圖進行區(qū)間轉(zhuǎn)換
累積直方圖:對前面求和。1的值=0和1的值的和
3.在累積直方圖中,概率相近的原始值,會被處理成相同的值。
7是因為給出的示例是三維的二進制,范圍是0-7,如果是np.unit9,應(yīng)是255。
四舍五入得到新的值:原先是0的像素變成1,原始是1的像素變成3…。
新的像素有1,3,4,5,6,7。是因為合并如原先的45都變成了5。
換成255的數(shù)示例
方法
dst=cv2.equalizeHist(src)
dst:處理結(jié)果
src:源圖像。
直方圖對比
import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('equ.bmp',cv2.IMREAD_GRAYSCALE) equ = cv2.equalizeHist(img) plt.hist(img.ravel(),256) plt.figure() plt.hist(equ.ravel(),256) plt.show()原始
處理后
示例:
處理的是灰度圖,需要讀取灰色圖
總目錄鏈接:
python3+opencv學(xué)習筆記匯總目錄(適合基礎(chǔ)入門學(xué)習)
電氣專業(yè)的計算機小白,寫博文不容易。如果你覺得本文不錯,請點個贊支持下。謝謝。
總結(jié)
以上是生活随笔為你收集整理的opencv学习笔记21:直方图和掩膜 原理及其应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 民航招飞行员要求
- 下一篇: opencv学习笔记22:傅里叶变换,高