OpenCV進階操作:圖像直方圖、直方圖均衡化

文章目錄

  • 一、圖像直方圖
  • 二、圖像直方圖的作用
  • 三、使用matplotlib方法繪制直方圖
    • 2.使用opencv的方法繪制直方圖(劃分16個小的子亮度區間)
    • 3、繪制彩色圖像的直方圖
  • 四、直方圖均衡化
    • 1、繪制原圖的直方圖
    • 2、繪制經過直方圖均衡化后的圖片的直方圖
    • 3、自適應直方圖均衡化
      • 1)概念
      • 2)步驟
      • 3)代碼實現


一、圖像直方圖

圖像直方圖是描述圖像像素值分布情況的統計圖形。它表示了圖像中不同像素值的數量或頻率。
在這里插入圖片描述

在圖像直方圖中,橫軸表示像素值的范圍,通常為0-255,縱軸表示像素值的數量或頻率。直方圖的每一個條柱代表某個像素值范圍內像素的數量或頻率。例如,柱子的高度表示圖像中具有該像素值的像素的數量或出現的頻率。
在這里插入圖片描述
在這里插入圖片描述

二、圖像直方圖的作用

  • 分析圖像的亮度分布
    通過直方圖可以了解圖像中不同亮度值的像素數量,從而判斷圖像的亮度分布情況。例如,如果直方圖中灰度級別集中在低亮度區域,說明圖像較暗;如果直方圖分布在高亮度區域,則說明圖像較亮。

  • 判斷圖像的對比度
    直方圖的寬度反映了圖像的對比度。直方圖寬度越大,表示圖像中像素值分布越分散,對比度越高;相反,直方圖寬度越窄,表示圖像中像素值分布越集中,對比度越低。

  • 檢測圖像的亮度和色彩偏移
    通過比較不同顏色通道的直方圖,可以判斷圖像是否存在亮度或色彩偏移。例如,如果紅色通道的直方圖偏向左側,則說明圖像偏向較暗的紅色,存在亮度偏移。

  • 圖像增強和調整
    通過分析直方圖,可以根據圖像的特點進行增強和調整。例如,可以通過直方圖均衡化來增強圖像的對比度;可以通過直方圖匹配來調整圖像的色彩和亮度分布。

  • 閾值分割
    直方圖可以用于確定圖像的閾值,用于分割圖像中的目標物體和背景。通過直方圖的谷底或者雙峰可以確定一個適合的閾值值,將圖像分成兩個部分。

三、使用matplotlib方法繪制直方圖

img =cv2.imread('../data/310.jpg',cv2.IMREAD_GRAYSCALE)# 轉成一維
a=img.ravel()# 使用 matplotlib 的 hist 函數繪制直方圖。
plt.hist(a,bins=256)
plt.show()# 參數解釋:
# - a:一維數組,即圖像的像素值組成的數組。
# - bins=256:指定直方圖的條數,即灰度級的數量。

在這里插入圖片描述

2.使用opencv的方法繪制直方圖(劃分16個小的子亮度區間)

#這里的calcHist參數在上面有介紹,這里是對img圖片做直方圖統計,采用灰度圖,即零通道,未設置掩膜,劃分為16個區間,亮度值統計[0,256]的值
phone_hist = cv2.calcHist([img],[0],None,[16],[0,256])
plt.plot(phone_hist)#使用calcHist的值繪制曲線圖
plt.show()

統計的值為每個亮度區間內屬于該亮度值的像素點個數。
在這里插入圖片描述

3、繪制彩色圖像的直方圖

img=cv2.imread('zl.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.show()

分別統計了不同顏色通道下的直方圖
在這里插入圖片描述

四、直方圖均衡化

直方圖均衡化:直方圖均衡化是一種圖像增強技術,它可以通過增加圖像的對比度和亮度來改善圖像的質量。直方圖均衡化通過將圖像的像素值分布均勻化來實現這一目標。
在這里插入圖片描述

在Python OpenCV中,可以使用cv2.equalizeHist()函數來實現直方圖均衡化。該函數將輸入圖像轉換為灰度圖像,并將其像素值分布均勻化,從而增強圖像的對比度和亮度。下面是將不均衡的直方圖均衡化之后的結果。

1、繪制原圖的直方圖

woman = cv2.imread('ja.jpg',cv2.IMREAD_GRAYSCALE)
# # # phone_hist = cv2.calcHist([phone],[0],None,[256],[0,256])
plt.hist(woman.ravel(), bins=256)#numpy中的ravel將數組多維度拉成一維數組
plt.show()

在這里插入圖片描述

2、繪制經過直方圖均衡化后的圖片的直方圖

phone_equalize = cv2.equalizeHist(woman)
plt.hist(phone_equalize.ravel(), bins=256)#numpy中的ravel將數組多維度拉成一維數組
plt.show()

在這里插入圖片描述
在這里插入圖片描述

3、自適應直方圖均衡化

1)概念

傳統的直方圖均衡化方法是將整個圖像的直方圖變成均勻分布,但在某些情況下,圖像的局部區域可能存在過亮或過暗的問題。自適應直方圖均衡化通過將圖像分成多個小的局部區域,并對每個局部區域進行直方圖均衡化,從而避免了全局均衡化帶來的問題。

2)步驟

  • 將圖像分成多個不重疊的小塊,每個小塊稱為一個局部區域。
  • 對每個局部區域進行直方圖均衡化,得到均衡化后的局部區域。
  • 將均衡化后的局部區域重新拼合,得到最終的均衡化圖像。

3)代碼實現

(接上面代碼)

clahe = cv2.createCLAHE(clipLimit=1,tileGridSize=(16,16))   # 通過類創建了一個均衡化對象
# clipLimit表示對比度的限制,tileGridSize表示圖像均勻劃分的小塊大小
phone_clahe = clahe.apply(phone)  # 將均衡化對象應用到圖片phone上得到均衡化處理后的圖片phone_clahe
res = np.hstack((phone,phone_equalize,phone_clahe))  # 將原圖、直方圖均衡化后的圖像、自適應直方圖均衡化后的圖像,水平方向合并
cv2.imshow("phone_equalize",res)
cv2.waitKey(0)

在這里插入圖片描述


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80293.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80293.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80293.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Open CASCADE學習|Geom2d_BezierCurve 類

概述 Open CASCADE 提供了幾何建模的強大工具集,其中 Geom2d_BezierCurve 類用于表示二維貝塞爾曲線。貝塞爾曲線在計算機圖形學和計算機輔助設計(CAD)中具有廣泛應用,本文將詳細介紹 Geom2d_BezierCurve 類及其使用方法。 貝塞爾曲線簡介 貝塞爾曲線是一種參數曲線,廣泛…

muduo源碼解析

1.對類進行禁止拷貝 class noncopyable {public:noncopyable(const noncopyable&) delete;void operator(const noncopyable&) delete;protected:noncopyable() default;~noncopyable() default; }; 2.日志 使用枚舉定義日志等級 enum LogLevel{TRACE,DEBUG,IN…

互聯網大廠Java面試實錄:Spring Boot與微服務架構在電商場景中的應用解析

💪🏻 1. Python基礎專欄,基礎知識一網打盡,9.9元買不了吃虧,買不了上當。 Python從入門到精通 😁 2. 畢業設計專欄,畢業季咱們不慌忙,幾百款畢業設計等你選。 ?? 3. Python爬蟲專欄…

關于匯編語言與程序設計——單總線溫度采集與顯示的應用

一、實驗要求 (1)握碼管的使用方式 (2)掌握DS18B20溫度傳感器的工作原理 (3)掌握單總線通信方式實現 MCU與DS18B20數據傳輸 二、設計思路 1.整體思路 通過編寫數碼管顯示程序和單總線溫度采集程序,結合溫度傳感報警,利用手指觸碰傳感器,當…

用html+js+css實現的戰略小游戲

效果圖: 兄弟們&#xff0c;話不多說&#xff0c;直接上代碼 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

Navicat BI 數據分析功能上線 | 數據洞察新方法

Navicat 17.2 版本一經發布&#xff0c;便以 AI 助手賦能智能交互、Snowflake 支持拓展數據連接版圖、拓展對關系型、維度以及數據倉庫 2.0 建模方法的支持等新特性與功能抓住了用戶的目光&#xff0c;但其中一項低調且實用的更新 - 在 BI 數據預覽中深度集成數據分析工具&…

【ts】defineProps數組的類型聲明

第一種&#xff1a;使用Record<string, unknown> Record<string, unknown>表示一個對象&#xff0c;鍵是string類型&#xff0c;值是未知的 import { defineProps, PropType } from vue;const props defineProps({dataList: {type: Array as PropType<Record…

OpenCv實戰筆記(4)基于opencv實現ORB特征匹配檢測

一、原理作用 ORB 原理&#xff08;Oriented FAST and Rotated BRIEF&#xff09;&#xff1a; 特征點檢測&#xff1a;使用 FAST 算法檢測角點&#xff08;關鍵點&#xff09;。 方向計算&#xff1a;為每個關鍵點分配主方向&#xff0c;增強旋轉不變性。 特征描述&#xff1a…

Unreal 從入門到精通之VR常用操作

文章目錄 前言1.如何設置VRPawn視角的位置。2.如何播放視頻3.如何播放VR全景視頻。4.如何打開和關閉VR模式。前言 我們使用Unreal5 開發VR 項目的時候,會遇到很多常見問題。 比如: 1.如何設置VRPawn視角的位置。 2.如何播放視頻。 3.如何播放VR全景視頻。 4.如何打開和關閉V…

[論文閱讀]Deep Cross Network for Ad Click Predictions

摘要 特征工程是許多預測模型成功的關鍵。然而&#xff0c;這個過程是困難的&#xff0c;甚至需要手動特征工程或窮舉搜索。DNN能夠自動學習特征交互&#xff1b;然而&#xff0c;它們隱式地生成所有的交互&#xff0c;并且不一定有效地學習所有類型的交叉特征。在本文中&…

數據庫(MySQL)基礎

一、登錄數據庫 在linux系統中登錄數據庫的指令 mysql -h 127.48.0.236 -P 3306 -u root -p -h&#xff1a;填寫IP地址&#xff0c;指明要連接的主機。如果不加該字段表示本地主機-P&#xff1a;填寫端口號&#xff0c;指明進程。 如果不加該字段會使用默認的端口號。-u&…

遠程調試---在電腦上devtools調試運行在手機上的應用

1、啟動項目–以vite項目為例:先ipconfig查看ip地址 ,然后在vite中配置host為ip地址 2、手機上查看項目:保證手機和電腦在同一局域網, 在手機瀏覽器打開我們vite啟動的項目地址, 3、使用chii進行遠程調試 (1) 安裝 npm install chii -g (2)啟動 chii start -p 8080 (3)在…

【程序員AI入門:開發】11.從零構建智能問答引擎:LangChain + RAG 實戰手冊

1、技術選型 組件推薦方案說明文本嵌入模型sentence-transformers/all-MiniLM-L6-v2輕量級且效果較好的開源模型向量數據庫FAISS高效的本地向量檢索庫大語言模型GPT-3.5/開源LLM&#xff08;如ChatGLM3&#xff09;根據資源選擇云端或本地模型文檔處理框架LangChain簡化RAG流程…

【Linux基礎】文件查找和文本處理指令

目錄 grep命令 find命令 tar命令 head命令 tail命令 wc命令 tee命令 grep命令 作用&#xff1a;在文件中搜索匹配特定模式的文本行&#xff0c;并將結果輸出到標準輸出&#xff08;通常是終端&#xff09;。 基本用法&#xff1a; grep [選項] 搜索模式 [文件名] 常用…

云軸科技ZStack入選賽迪顧問2025AI Infra平臺市場發展報告代表廠商

DeepSeek憑借低成本、高性能、開源優勢帶來的蝴蝶效應依然在持續影響企業AI應用部署。尤其在數據安全備受關注的背景下&#xff0c;私有化部署已經成為企業應用AI大模型的優選方案。賽迪顧問在近期發布的《2025中國AI Infra平臺市場發展研究報告》中認為&#xff0c;在推理算力…

從零開始跑通3DGS教程:(四)修改(縮放、空間變換)colmap生成的sfm結果

寫在前面 本文內容 本文所屬《從零開始跑通3DGS教程》系列文章&#xff1b; 通過colmap進行的sfm的普通方式會丟失場景的物理尺度信息&#xff0c;并且并不在符合一般認知的坐標系下&#xff0c;本文將讀取colmap生成的點云和相機pose&#xff0c;將其進行空間變換和縮放之后&a…

RK3568-OpenHarmony(1) : OpenHarmony 5.1的編譯

概述: 本文主要描述了&#xff0c;如何在ubuntu-20.04操作系統上&#xff0c;編譯RK3568平臺的OpenHarmony 5.1版本。 搭建編譯環境 a. 安裝軟件包 sudo apt-get install git-lfs ruby genext2fs build-essential git curl libncurses5-dev libncursesw5-dev openjdk-11-jd…

vue+tsc+noEmit導致打包報TS類型錯誤問題及解決方法

項目場景&#xff1a; 提示&#xff1a;這里簡述項目相關背景&#xff1a; 當我們新建vue3項目,package.json文件會自動給我添加一些配置選項,這寫選項基本沒有問題,但是在實際操作過程中,當項目越來越復雜就會出現問題,本文給大家分享vuetscnoEmit導致打包報TS類型錯誤問題及…

Js 判斷瀏覽器cookie 是否啟用

驗證時 google瀏覽器 135.0.7049.117 不生效 cookie.html <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>Cookie 檢測</title> </head> <body><h1>檢測是否啟用 Cookie<…

Lambda表達式解讀

本文通過具體案例演示函數式接口Function<T,R>的三種實現方式演變過程。 一、傳統匿名內部類實現 Integer resInt1 t1(new Function<String, Integer>() {Overridepublic Integer apply(String s) {int i Integer.parseInt(s);return i;} });實現特點&#xff1…