新四季網

pythonopencv如何圈出圖形(Python圖像處理如何調用OpenCV繪製直方圖)

2023-04-23 21:42:58

本文分享自華為雲社區《[Python圖像處理] 十一.灰度直方圖概念及OpenCV繪製直方圖-雲社區-華為雲》,作者:eastmount。

一. 灰度直方圖基本概念什麼是灰度直方圖?

灰度直方圖(histogram)是灰度級的函數,描述的是圖像中每種灰度級像素的個數,反映圖像中每種灰度出現的頻率。橫坐標是灰度級,縱坐標是灰度級出現的頻率。

對於連續圖像,平滑地從中心的高灰度級變化到邊緣的低灰度級。直方圖定義為:

其中A(D)為閾值面積函數:為一幅連續圖像中被具有灰度級D的所有輪廓線所包圍的面積。對於離散函數,固定ΔD為1,則:H(D)=A(D)-A(D 1)。

色彩直方圖是高維直方圖的特例,它統計色彩的出現頻率,即色彩概率分布信息。通常這需要一定的量化過程,將色彩分成若干互不重疊的種類。一般不直接在RGB色彩空間中統計,而是在將亮度分離出來後,對代表色彩部分的信息進行統計,如在HSI空間的HS子空間、YUV空間的UV子空間,以及其它反映人類視覺特點的彩色空間表示中進行。

直方圖的計算方法如下:

依據定義,若圖像具有L(通常L=256,即8位灰度級)級灰度,則大小為MxN的灰度圖像f(x,y)的灰度直方圖hist[0...L-1]可用如下計算獲得。

1、初始化 hist[k]=0;k=0,...,L-1

2、統計 hist[f(x,y)] ;x=0,...,M-1, y =0,...,N-1

3、歸一化 hist[f(x,y)]/=M*N

那麼說了這麼多,直方圖究竟有什麼作用呢?

在使用輪廓線確定物體邊界時,通過直方圖更好的選擇邊界閾值,進行閾值化處理;對物體與背景有較強對比的景物的分割特別有用;簡單物體的面積和綜合光密度IOD可以通過圖像的直方圖求得。

二. 繪製直方圖1.基礎概念

在直方圖中,橫坐標表示圖像中各個像素點的灰度級,縱坐標表示具有該灰度級的像素個數。

假設存在一個3*3的圖像,如下圖所示,x數組統計的是像素點的灰度級,y數組統計的是具有該灰度級的像素個數。其中,灰度為1的像素共3個,灰度為2的像素共1個,灰度為3的像素共2個,灰度為4的像素共1個,灰度為5的像素共2個。

x = [1, 2, 3, 4, 5]

y = [3, 1, 2, 1, 2]

繪製的折線圖如下所示:

繪製的直方圖如下所示:

如果灰度級為0-255(最小值0黑色,最大值255白色),同樣可以繪製對應的直方圖,下圖是三張圖片拼接而成及其對應的直方圖。

2.歸一化直方圖

該直方圖的橫坐標表示圖像中各個像素點的灰度級,縱坐標表示出現這個灰度級的概率。其計算方法如下:

(1) 先計算灰度級及對應像素的個數

x = [1, 2, 3, 4, 5]

t = [3, 1, 2, 1, 2]

(2) 統計總的像素個數

n = (3 1 2 1 2) = 9

(3) 統計各個灰度級的出現概率

y = t / n = [3/9, 1/9, 2/9, 1/9, 2/9]

3.繪製直方圖

主要調用Matplotlib的子庫pyplot實現,它提供了類似於Matlab的繪圖框架,matplotlib是非常強大基礎的一個Python繪圖包。Provides a Matlab-like plotting framework. 導入代碼如下:

import matplotlib.pyplot as plt

其中繪製直方圖主要調用hist函數實現,它根據數據源和像素級繪製直方圖。函數原型如下:

hist(數據源, 像素級)參數:數據源必須是一維數組,通常需要通過函數ravel拉直圖像像素級一般是256,表示[0, 255]

函數ravel將多維數組降為一維數組,格式為:

一維數組 = 多維數組.ravel

4.代碼實現

#encoding:utf-8import cv2 import numpy as npimport matplotlib.pyplot as pltsrc = cv2.imread('test01.jpg')cv2.imshow("src", src)cv2.waitKey(0)cv2.destroyAllWindowsplt.hist(src.ravel, 256)plt.show

輸出結果如下所示:

三. 使用OpenCV統計繪製直方圖

1.函數原型

前面講解調用matplotlib庫繪製直方圖,接下來講解使用OpenCV統計繪製直方圖的例子。

直方圖橫坐標:圖像中各個像素點的灰度級

直方圖縱坐標:具有該灰度級的像素個數

主要調用函數calcHist實現:

hist = cv2.calcHist(images, channels, mask, histSize, ranges, accumulate)

參數:

hist表示直方圖,返回的是一個二維數組images表示原始圖像channels表示指定通道,通道編號需要用中括號括起,輸入圖像是灰度圖像時,它的值為[0],彩色圖像則為[0]、[1]、[2],分別表示B、G、Rmask表示掩碼圖像,統計整副圖像的直方圖,設為None,統計圖像的某一部分直方圖時,需要掩碼圖像histSize表示BINS的數量,參數子集的數目,如下圖當bins=3表示三個灰度級

ranges表示像素值範圍,例如[0, 255]

accumulate表示累計疊加標識,默認為false,如果被設置為true,則直方圖在開始分配時不會被清零,該參數允許從多個對象中計算單個直方圖,或者用於實時更新直方圖;多個直方圖的累積結果用於對一組圖像的直方圖計算

2.代碼實現

首先計算圖像灰度級的基本大小、形狀及內容。

#encoding:utf-8import cv2 import numpy as npimport matplotlib.pyplot as pltsrc = cv2.imread('test01.jpg')#參數:原圖像 通道[0]-B 掩碼 BINS為256 像素範圍0-255 hist = cv2.calcHist([src], [0], None, [256], [0,255])print(type(hist))print(hist.size)print(hist.shape)print(hist)

輸出結果如下所示:

下面是繪製圖像的代碼,首先補充一些matplotlib庫繪製圖像代碼,也推薦我的文章。

[Python數據挖掘課程] 六.Numpy、Pandas和Matplotlib包基礎知識

#encoding:utf-8import cv2 import numpy as npimport matplotlib.pyplot as plt#繪製sin函數曲線x1 = np.arange(0, 6, 0.1)y1 = np.sin(x1)plt.plot(x1, y1)#繪製坐標點折現x2 = [0, 1, 2, 3, 4, 5, 6]y2 = [0.3, 0.4, 2.5, 3.4, 4, 5.8, 7.2]plt.plot(x2, y2)#省略有規則遞增的x2參數 y3 = [0, 0.5, 1.5, 2.4, 4.6, 8]plt.plot(y3,)plt.show

輸出結果有三條線,如下所示:

最後給出調用calcHist計算B、G、R灰度級並繪製圖形的代碼。

#encoding:utf-8import cv2 import numpy as npimport matplotlib.pyplot as pltsrc = cv2.imread('test01.jpg')histb = cv2.calcHist([src], [0], None, [256], [0,255])histg = cv2.calcHist([src], [1], None, [256], [0,255])histr = cv2.calcHist([src], [2], None, [256], [0,255])cv2.imshow("src", src)cv2.waitKey(0)cv2.destroyAllWindowsplt.plot(histb, color='b')plt.plot(histg, color='g')plt.plot(histr, color='r')plt.show

輸出結果如下圖所示:

點擊下方關注,第一時間了解華為雲新鮮技術~

華為雲博客_大數據博客_AI博客_雲計算博客_開發者中心-華為雲

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了