網站首頁 編程語言 正文
在討論其返回值前,我們先來介紹以下calcHist()函數的用法:
cv2.calcHist()函數
cv2.calcHist()函數的作用
通過直方圖可以很好的對整幅圖像的灰度分布有一個整體的了解,直方圖的x軸是灰度值(0~255),y軸是圖片中具有同一個灰度值的點的數目。
而calcHist()函數則可以幫助我們統計一幅圖像的直方圖
cv2.calcHist(images,channels,mask,histSize,ranges)
-
images
: 原圖像圖像格式為 uint8 或 ?oat32。當傳入函數時應 用中括號 [] 括來例如[img] -
channels
: 同樣用中括號括來它會告函數我們統幅圖 像的直方圖。如果入圖像是灰度圖它的值就是 [0]如果是彩色 圖像 的傳入的參數可以是 [0][1][2] 它們分別對應著 BGR。 -
mask
: 掩模圖像。統整幅圖像的直方圖就把它為 None。但是如果你想統圖像某一分的直方圖的你就制作一個掩模圖像并使用它。 -
histSize
:BIN 的數目。也應用中括號括來 -
BINS
: 上面的直方圖顯示了每個像素值的像素數,即從0到255。即您需要256個值才能顯示上述直方圖。但是請考慮一下,如果您不需要單獨查找所有像素值的像素數,而是在像素值間隔內查找像素數,該怎么辦?例如,您需要找到介于 0 到 15 之間的像素數,然后是 16 到 31、...、240 到 255。您只需要 16 個值來表示直方圖。 - 因此,只需將整個直方圖拆分為 16 個子部分,每個子部分的值就是其中所有像素計數的總和。這每個子部分都稱為"BIN"。在第一種情況下,條柱數為256(每個像素一個),而在第二種情況下,它只有16。BINS 在 OpenCV 文檔中由術語histSize表示。
-
ranges
: 像素值范圍常為 [0 256]
示例:
import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('cat.jpg', 0) # 0表示灰度圖 hist = cv2.calcHist([img], [0], None, [256], [0, 256]) # print(hist) # print(hist[175]) # print(type(hist)) plt.hist(img.ravel(),256); #print(img.ravel()) plt.show()
輸出結果:
示例2:多通道圖的“直方圖”
import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('cat.jpg') color = ('b','g','r') for i,col in enumerate(color): histr = cv2.calcHist([img],[i],None,[256],[0,256]) plt.plot(histr,color = col) plt.xlim([0,256]) print(i,col)
輸出結果:
到這里完整的直方圖就這樣子繪制出來了,但是大家也許會對calcHist的返回值有疑問,到底返回了什么才能畫出來這樣的圖像呢?下面我們則來討論該函數的返回值
cv2.calcHist()函數的返回值
對于hist = cv2.calcHist([img],[0],None,[256],[0,256])中,hist是一個256*1的矩陣,每一個值代表了每個灰度值對應的像素點數目
print(type(hist))
<class 'numpy.ndarray'>
輸出的結果表示這是一個多維數組
print(hist)
[[1.000e+00]
?[0.000e+00]
?[2.000e+00]
?[0.000e+00]
? ? ? ?.......
?[2.010e+02]
?[2.180e+02]
?[2.160e+02]
?[2.660e+02]
?[3.350e+02]
?[3.110e+02]
?[4.670e+02]]
經計算,共有256個值,即可以輸出hist[0]到hist[255]。
整個hist[i]則表示灰度值
print(hist[175],hist[255])
[3181.] [467.]
通過直方圖可看出輸出的結果就是每一個灰度值對應的像素數目
原文鏈接:https://blog.csdn.net/star_sky_sc/article/details/122371392
相關推薦
- 2022-08-06 winform把Office轉成PDF文件_C#教程
- 2022-01-26 阿里云服務器端口請求失敗(在控制臺把端口添加到服務器的安全組)
- 2022-05-24 Python的列表推導式你了解嗎_python
- 2022-02-04 mybatis @Select jdbctype 可選類型
- 2022-02-23 IDEA git 拉取項目時報 No tracked branch configured for b
- 2022-03-27 基于rsync寫腳本實現多節點多服務器文件一鍵同步的方法_相關技巧
- 2023-08-15 antdv Input組件maxLength屬性設置默認值
- 2022-05-25 RedisTemplate實現setnx分布式鎖
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支