欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python+OpenCV圖像處理之直方圖統(tǒng)計

 更新時間:2021年12月18日 11:52:26   作者:一馬歸一碼  
直方圖就是對圖像的另外一種解釋,它描述了整幅圖像的灰度分布。通過直方圖我們可以對圖像的亮度、灰度分布、對比度等有了一個直觀的認識。本文將為大家詳細介紹一下如何通過OpenCV實現(xiàn)直方圖統(tǒng)計,感興趣的可以了解一下

1. 直方圖概述

(1)基本概念

直方圖就是對圖像的另外一種解釋,它描述了整幅圖像的灰度分布。直方圖的 x 軸代表灰度值(0~255),y 軸代表圖片中同一種灰度值的像素點的數(shù)目,所以通過直方圖我們可以對圖像的亮度、灰度分布、對比度等有了一個直觀的認識

(2)直方圖中的術(shù)語

BINS

前面說到,直方圖中的 x 軸表示的是灰度值,一幅灰度圖的灰度等級有 256 級,所以我們是否需要將每一個等級標注在一條軸上呢?或者如果我們需要的不是每一個灰度值的分布,而是一個范圍內(nèi)的灰度分布呢?所以我們將每一個需要的灰度值范圍稱為一個 BIN,即所有的灰度等級被分為幾個小組,每一個小組是一個 BIN

DIMS

代表的是我們收集的圖像的參數(shù)的數(shù)目,直方圖我們?nèi)绻皇占叶戎狄粋€參數(shù),那么該參數(shù)的值就是1

RANGE

代表統(tǒng)計的灰度值的范圍,一般的范圍是[0-255]

2. 直方圖繪制

(1)讀取圖像信息

在計算機視覺系列的文章中第一件事就是讀取圖像信息:

"""
Author:XiaoMa
date:2021/10/24
"""
#調(diào)用需要的包
import cv2
import matplotlib.pyplot as plt
 
img0 = cv2.imread('E:\From Zhihu\For the desk\cvseven.jpeg')
img1 = cv2.cvtColor(img0, cv2.COLOR_BGR2GRAY)     #轉(zhuǎn)化為灰度圖
h, w = img1.shape[:2]
print(h, w)
cv2.namedWindow("W0")
cv2.imshow("W0", img1)
cv2.waitKey(delay = 0)

圖像信息如下:

419 636?

(2)繪制直方圖

繪制直方圖使用的函數(shù)如下:

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

images:原圖

channels:指定通道 [0]代表灰度圖,如果讀入的圖像不是灰度圖,該值可以是[0],[1],[2]分別代表通道 B,G,R

mask:掩碼圖像,進行整張圖的繪制時為 None

histSize:BIN 的數(shù)量

ranges:像素值范圍

accumulate:累計標識,一般可以省略

灰度圖的直方圖?

#繪制直方圖
hist = cv2.calcHist([img1], [0], None, [256], [0, 255])
plt.plot(hist, color = 'lime', label = '直方圖', linestyle = '--')
plt.legend()
plt.savefig('E:\From Zhihu\For the desk\cvseven1.jpeg')
plt.show()

可以看出這幅灰度圖中亮度較高的像素點還是占多數(shù)的,即整體亮度較高

彩色圖直方圖

讀入彩色圖像,并對某一個通道進行直方圖繪制

"""
Author:XiaoMa
date:2021/10/24
"""
#調(diào)用需要的包
import cv2
import matplotlib.pyplot as plt
 
plt.rcParams['font.family'] = 'SimHei'       #將全局中文字體改為黑體
 
img0 = cv2.imread('E:\From Zhihu\For the desk\cvseven.jpeg')
img1 = cv2.cvtColor(img0, cv2.COLOR_BGR2GRAY)
h, w = img1.shape[:2]
print(h, w)
cv2.namedWindow("W0")
cv2.imshow("W0", img0)
cv2.waitKey(delay = 0)
 
#繪制直方圖
hist = cv2.calcHist([img0], [0], None, [256], [0, 255])
plt.plot(hist, color = 'lime', label = '藍色通道直方圖', linestyle = '--', alpha = 1)
plt.legend()
plt.savefig('E:\From Zhihu\For the desk\cvseven1.jpeg')
plt.show()

上圖就是對藍色通道繪制的直方圖?

3. 掩膜直方圖

(1)基本概念

如果我們不需要整幅圖像中的直方圖,而是某個區(qū)域的直方圖,我們只需要繪制一幅圖,將需要統(tǒng)計的部分設置為白色,不需要統(tǒng)計的部分設置為黑色,就構(gòu)成了一幅掩膜圖像

(2)實現(xiàn)代碼

得到掩模圖

##得到掩膜圖
mask = np.zeros(img0.shape, np.uint8)    #將每一個像素點設置為0,就是黑色
mask[109:309, 212:412] = 255             #選取特定區(qū)域設置為白色
img0_1 = cv2.bitwise_and(img0, mask)     #圖像與操作得到掩膜圖
cv2.namedWindow("W1")
cv2.imshow("W1", img0_1)
cv2.waitKey(delay = 0)

繪制掩膜直方圖?

#繪制掩膜直方圖
##得到掩膜圖
mask = np.zeros(img1.shape, np.uint8)    #將每一個像素點設置為0,就是黑色
mask[109:309, 212:412] = 255             #選取特定區(qū)域設置為白色
img1_1 = cv2.bitwise_and(img1, mask)     #圖像與操作得到掩膜圖
cv2.namedWindow("W1")
cv2.imshow("W1", img1_1)
cv2.waitKey(delay = 0)
##繪制掩膜直方圖和部分圖像直方圖
hist1 = cv2.calcHist([img1], [0], mask, [256], [0, 255])         #掩膜圖直方圖,參數(shù)需要修改
hist2 = cv2.calcHist([img1], [0], None, [256], [0,255])
plt.plot(hist1, color = 'b', label = '掩膜直方圖', linestyle = '--')
plt.plot(hist2, color = 'r', label = '原圖直方圖', linestyle = '-.')
plt.legend()
plt.savefig('E:\From Zhihu\For the desk\cvseven2.jpeg')
plt.show()

得到的圖像如下:

4. H-S 直方圖

(1)基本概念

?H(Hue) - S(Saturation) 直方圖,即色調(diào) - 飽和度直方圖

繪制該直方圖需要將源RGB圖像轉(zhuǎn)化到 HSV (色調(diào)、飽和度、亮度)顏色空間中去

img0_2 = cv2.cvtColor(img0, cv2.COLOR_BGR2HSV) #將 RGB 空間轉(zhuǎn)化為 HSV 空間
cv2.namedWindow("W2")
cv2.imshow("W2", img0_2)
cv2.waitKey(delay = 0)

(2)繪制二維H-S直方圖

此處參考:OpenCV 官網(wǎng)

##繪制H-S直方圖
hist3 = cv2.calcHist ([img0_2], [0, 1], None , [180, 256], [0, 180, 0, 256])#官網(wǎng)給出的解釋:channel = [0,1] 因為我們需要同時處理 H 和 S 平面;bins = [180,256] H 平面為 180,S 平面為 256;range = [0,180,0,256] 色調(diào)值介于 0 和 180 之間,飽和度介于 0 和 256 之間
plt.imshow(hist3)
plt.savefig('E:\From Zhihu\For the desk\cvseven3.jpeg')
plt.show()

得到的圖像如下:

上圖中的 X 軸代表S(飽和度),Y軸代表H(色調(diào))?

該圖中的峰值主要分布在 S 在(0-50)之間 H在(20-80),至于為什么峰值較少,個人猜測是由于原圖中的色彩變化不明顯,導致沒辦法繪制出過多過明顯的峰值

到此這篇關于Python+OpenCV圖像處理之直方圖統(tǒng)計的文章就介紹到這了,更多相關Python OpenCV直方圖統(tǒng)計內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python中如何實現(xiàn)徑向基核函數(shù)

    python中如何實現(xiàn)徑向基核函數(shù)

    這篇文章主要介紹了python中如何實現(xiàn)徑向基核函數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python中的struct.unpack示例詳解

    Python中的struct.unpack示例詳解

    在Python中,struct.unpack是一個函數(shù),用于將字節(jié)串轉(zhuǎn)換為元組,這個函數(shù)在處理二進制數(shù)據(jù)時非常有用,這篇文章主要介紹了Python中的struct.unpack示例詳解,需要的朋友可以參考下
    2023-12-12
  • Keras框架中的epoch、bacth、batch size、iteration使用介紹

    Keras框架中的epoch、bacth、batch size、iteration使用介紹

    這篇文章主要介紹了Keras框架中的epoch、bacth、batch size、iteration使用介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python探索之爬取電商售賣信息代碼示例

    Python探索之爬取電商售賣信息代碼示例

    這篇文章首先簡單介紹了網(wǎng)絡爬蟲的基本概念,然后向大家分享了一段有關爬取電商售賣信息的實例代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • python中similarity函數(shù)實例用法

    python中similarity函數(shù)實例用法

    在本篇文章里小編給大家整理的是一篇關于python中similarity函數(shù)實例用法,有興趣的朋友們可以跟著學習下。
    2021-10-10
  • Python數(shù)據(jù)可視化之Seaborn的使用詳解

    Python數(shù)據(jù)可視化之Seaborn的使用詳解

    Seaborn庫是python中基于matplotlib庫的可視化工具庫,通過sns我們可以更方便地繪制出更美觀的圖表。本文將分享python基于Seaborn庫的一系列繪圖操作,感興趣的可以了解一下
    2022-04-04
  • Python 中 list 的各項操作技巧

    Python 中 list 的各項操作技巧

    最近在學習 python 語言。大致學習了 python 的基礎語法。覺得 python 在數(shù)據(jù)處理中的地位和它的 list 操作密不可分,今天把相關基礎操作記錄到腳本之家平臺,需要的的朋友參考下
    2017-04-04
  • 解決Pandas to_json()中文亂碼,轉(zhuǎn)化為json數(shù)組的問題

    解決Pandas to_json()中文亂碼,轉(zhuǎn)化為json數(shù)組的問題

    今天小編就為大家分享一篇解決Pandas to_json() 中文亂碼,轉(zhuǎn)化為json數(shù)組的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python多線程的使用詳情

    Python多線程的使用詳情

    這篇文章主要介紹了Python多線程的使用詳情,線程之間執(zhí)行是無序的,cpu調(diào)度哪個線程就執(zhí)行哪個線程,下文相關介紹需要的小伙伴可以參考一下
    2022-04-04
  • Python生成可執(zhí)行文件之PyInstaller庫的使用方式

    Python生成可執(zhí)行文件之PyInstaller庫的使用方式

    PyInstaller是一個十分有用的第三方庫,通過對源文件打包,Python程序可以在沒有安裝Python的環(huán)境中運行,也可以作為一個獨立文件方便傳遞和管理,下面這篇文章主要給大家介紹了關于Python生成可執(zhí)行文件之PyInstaller庫的使用方式,需要的朋友可以參考下
    2022-04-04

最新評論