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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【图像处理】——图像灰度直方图的绘制(直接调用函数和自定义函数)

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【图像处理】——图像灰度直方图的绘制(直接调用函数和自定义函数) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、灰度直方圖概念

二、直接調用opencv的函數caclHist()

1、函數介紹

2、實例

(1)繪制全局直方圖

(2)繪制局部的直方圖

?

三、自定義函數進行灰度直方圖的繪制

1、代碼

2、結果


?


一、灰度直方圖概念

灰度直方圖是關于灰度級分布的函數,將數字圖像中的所有像素,按照灰度值的大小,統計其出現的頻率。其中,橫坐標是灰度級,縱坐標是該灰度級出現的頻率。

對圖像中不同灰度級別出現的次數進行統計,統計后進行繪制直方圖,橫坐標表示灰度級別0-255,縱坐標表示每個灰度級別在圖像中出現的次數,一般會對次數進行歸一化,用每個灰度級出現的次數除以圖像的像素總個數。

二、直接調用opencv的函數caclHist()

1、函數介紹

返回的是一個一維數組(256,1)

hist = cv2.calcHist([images],[channels],mask,histSize,ranges ) 參數說明: images:uint8或float32類型的原圖像。用方括號表示,即“[img]”; channels:計算直方圖的通道索引,也在方括號中給出.例如,如果輸入是灰度圖像,則其值為[0].對于彩色圖像,可以通過[0],[1]或[2]分別計算藍色,綠色或紅色通道的直方圖. mask:掩碼,蒙版圖像.要查找完整圖像的直方圖,它將顯示為“無”.但是,如果要查找圖像特定區域的直方圖,則必須為其創建蒙版圖像并將其作為蒙版. histSize:灰度級的個數,這代表我們的BIN計數.需要在方括號中給出.對于滿量程,我們通過[256]. ranges:這是像素值的范圍的范圍。通常,它是[0,256].

2、實例

(1)繪制全局直方圖

獲得上圖的直方圖,首先得先進行灰度化

import cv2 import numpy as np import matplotlib.pyplot as pltdef image_calcuhist(imagepath):img = cv2.imread(imagepath)#讀取圖片img_shape = img.shapegray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#灰度化hist = cv2.calcHist([gray],[0],None,[256],[0,256])#計算灰度級別出現頻率,返回的是一個(256,1)的數組for i in range(hist.shape[0]):hist[i] = hist[i]/(img_shape[0]*img_shape[1])#對獲得的直方圖數據進行歸一化return histif __name__ == '__main__':x = np.linspace(0,255,256)#橫坐標灰度級別y = image_calcuhist("colorful_lena.jpg")#縱坐標值獲取plt.bar(x,y.ravel(),0.9,alpha=1,color='b')#通過matplotlib進行直方圖的繪制plt.show()#顯示直方圖

(2)繪制局部的直方圖

import cv2 import numpy as np import matplotlib.pyplot as pltimg = cv2.imread("colorful_lena.jpg",0) h,w = img.shape#構建一個掩模,需要繪制直方圖的局部圖像區域的像素設置為255,其他部分設置為0 mask = np.zeros((h,w),np.uint8) for i in range(0,int(h/2)):for j in range(0,int(w/2)):mask[int(h/4)+i,int(w/4)+j] = 255#全幅圖像的直方圖 hist = cv2.calcHist([img],[0],None,[256],[0,256]) #局部的直方圖 hist1 = cv2.calcHist([img],[0],mask,[256],[0,256]) x = np.linspace(0,255,256) plt.plot(x,hist.ravel()) plt.plot(x,hist1.ravel()) plt.show() cv2.imshow('',mask) cv2.imshow('1',img) cv2.waitKey(0)

藍色線為全局直方圖,橙色為局部直方圖

三、自定義函數進行灰度直方圖的繪制

1、代碼

# 1 0-255 2 概率 # 本質:統計每個像素灰度 出現的概率 0-255 p import cv2 import numpy as np import matplotlib.pyplot as pltdef image_histdefinition(imagepath):img = cv2.imread(imagepath)#讀取圖片imgInfo = img.shape#獲得圖片的尺寸大小height = imgInfo[0]width = imgInfo[1]# 灰度化gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)count = np.zeros(256,np.float) # 共256個,創建一個數組用于存放灰度級別出現的頻率#計算灰度級別頻率for i in range(0,height):for j in range(0,width):pixel = gray[i,j] # 獲取灰度等級index = int(pixel) # 強制類型轉換count[index] = count[index]+1# 計算出現概率,即歸一化for i in range(0,255):count[i] = count[i]/(height*width)return countif __name__ == '__main__':# 繪圖x = np.linspace(0, 255, 256)count = image_histdefinition('colorful_lena.jpg')y = countplt.bar(x, y, 0.9, alpha=1, color='b')plt.show()

2、結果

?

兩種方法得到的直方圖是一樣的,證明方法是可行的。

總結

以上是生活随笔為你收集整理的【图像处理】——图像灰度直方图的绘制(直接调用函数和自定义函数)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。