日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv学习笔记21:直方图和掩膜 原理及其应用

發(fā)布時間:2024/9/30 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv学习笔记21:直方图和掩膜 原理及其应用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

直方圖概念

如圖:下面黑色圖為上面圖的直方圖
橫坐標:圖像中各個像素點的灰度級
縱坐標:具有該灰度級的像素個數(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為計算好幾幅圖的直方圖。

繪制灰度圖像直方圖
不使用掩碼

import cv2 import matplotlib.pyplot as plt o=cv2.imread("boatGray.bmp") histb = cv2.calcHist([o],[0],None,[256],[0,255]) print("type:",type(histb)) print('szie:',histb.size) print('shape:',histb.shape) plt.plot(histb,color='r') plt.show()



繪制彩色圖像直方圖
不使用掩膜
注意012,是BGR,非RGB

import cv2 import matplotlib.pyplot as plt o=cv2.imread("girl.bmp") histb = cv2.calcHist([o],[0],None,[256],[0,255]) histg = cv2.calcHist([o],[1],None,[256],[0,255]) histr = cv2.calcHist([o],[2],None,[256],[0,255]) plt.plot(histb,color='b') plt.plot(histg,color='g') plt.plot(histr,color='r') plt.show()


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)

import cv2 import numpy as np import matplotlib.pyplot as plt image=cv2.imread("girl.bmp",cv2.IMREAD_GRAYSCALE) mask=np.zeros(image.shape,np.uint8) mask[200:400,200:400]=255 histMI=cv2.calcHist([image],[0],mask,[256],[0,255])#使用掩膜,只對第一通道 histImage=cv2.calcHist([image],[0],None,[256],[0,255])#不適用掩膜,只對第一通道 plt.plot(histImage,'r') plt.plot(histMI) plt.show()

原圖

藍色為使用掩膜的直方圖

掩膜處理

黑色為0,其他色為1.將掩膜與原始圖像進行與操作。得到處理結(jié)果。



使用方法
計算結(jié)果=cv2.bitwise_and(原始圖像,掩膜)
bitwise:按位操作
and:與運算

import cv2 import numpy as np import matplotlib.pyplot as plt image=cv2.imread("boat.bmp",0) mask=np.zeros(image.shape,np.uint8) mask[200:400,200:400]=255 mi=cv2.bitwise_and(image,mask) cv2.imshow('original',image) cv2.imshow('mask',mask) cv2.imshow('mi',mi) cv2.waitKey() cv2.destroyAllWindows()

直方圖均衡化

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

原始

處理后

示例:
處理的是灰度圖,需要讀取灰色圖

import cv2 import numpy as np import matplotlib.pyplot as plt o=cv2.imread("equ.bmp",cv2.IMREAD_GRAYSCALE)#讀取灰色圖像 r=cv2.equalizeHist(o) cv2.imshow("original",o) cv2.imshow("result",r) cv2.waitKey() cv2.destroyAllWindows()

import cv2 import matplotlib.pyplot as plt img = cv2.imread('boat.bmp',cv2.IMREAD_GRAYSCALE) equ = cv2.equalizeHist(img) plt.subplot(221) plt.imshow(img,cmap=plt.cm.gray),plt.axis('off') plt.subplot(222) plt.imshow(equ,cmap=plt.cm.gray),plt.axis('off') plt.subplot(223) plt.hist(img.ravel(),256) plt.subplot(224) plt.hist(equ.ravel(),256) plt.show()


總目錄鏈接:
python3+opencv學(xué)習筆記匯總目錄(適合基礎(chǔ)入門學(xué)習)
電氣專業(yè)的計算機小白,寫博文不容易。如果你覺得本文不錯,請點個贊支持下。謝謝。

總結(jié)

以上是生活随笔為你收集整理的opencv学习笔记21:直方图和掩膜 原理及其应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。