当前位置: 首页 > news >正文

OpenCV(8):图像直方图

        在图像处理中,直方图是一种非常重要的工具,它可以帮助我们了解图像的像素分布情况。通过分析图像的直方图,我们可以进行图像增强、对比度调整、图像分割等操作。

1 什么是图像直方图?

        图像直方图是图像像素强度分布的图形表示,对于灰度图像,直方图显示了每个灰度级(0到255)在图像中出现的频率,对于彩色图像,我们可以分别计算每个通道(如R、G、B)的直方图。直方图可以帮助我们了解图像的亮度、对比度等信息。例如,如果直方图集中在低灰度区域,说明图像偏暗;如果直方图分布均匀,说明图像对比度较好。

  • 直方图: 表示图像中像素强度的分布情况,横轴表示像素强度值,纵轴表示该强度值的像素数量。
  • 灰度直方图: 针对灰度图像的直方图,表示每个灰度级的像素数量。
  • 颜色直方图: 针对彩色图像的直方图,分别表示每个颜色通道(如 BGR)的像素强度分布。
功能函数说明
计算直方图cv2.calcHist()计算图像的直方图。
直方图均衡化cv2.equalizeHist()增强图像的对比度。
直方图比较cv2.compareHist()比较两个直方图的相似度。
绘制直方图matplotlib.pyplot.plot()使用 Matplotlib 绘制直方图。

        直方图的应用 

  • 图像增强: 通过直方图均衡化,可以增强图像的对比度,使细节更加清晰。
  • 图像分割: 过分析直方图,可以确定阈值,用于图像分割。
  • 图像匹配: 通过比较直方图,可以判断两幅图像的相似度,用于图像匹配和检索。
  • 颜色分析: 通过颜色直方图,可以分析图像的颜色分布,用于颜色校正和风格化处理。

2 OpenCV 中的直方图计算函数

        在 OpenCV 中,我们可以使用 cv2.calcHist() 函数来计算图像的直方图。

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])
  • images: 输入的图像列表,通常是一个包含单通道或多通道图像的列表。例如 [img]
  • channels: 需要计算直方图的通道索引。对于灰度图像,使用 [0];对于彩色图像,可以使用 [0][1][2] 分别计算蓝色、绿色和红色通道的直方图。
  • mask: 掩码图像。如果指定了掩码,则只计算掩码区域内的像素。如果不需要掩码,可以传入 None
  • histSize: 直方图的 bin 数量。对于灰度图像,通常设置为 [256],表示将灰度级分为 256 个 bin。
  • ranges: 像素值的范围。对于灰度图像,通常设置为 [0, 256],表示像素值的范围是 0 到 255。
  • hist: 输出的直方图数组。
  • accumulate: 是否累积直方图。如果设置为 True,则直方图不会被清零,而是在每次调用时累积。

        假设我们有一张灰度图像 img,我们可以使用以下代码计算其直方图:

import cv2
import matplotlib.pyplot as plt# 读取图像
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)# 计算直方图
hist = cv2.calcHist([img], [0], None, [256], [0, 256])# 绘制直方图
plt.plot(hist)
plt.title('Grayscale Histogram')
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')
plt.show()

3 直方图均衡化

        直方图均衡化是一种增强图像对比度的方法,通过重新分配像素强度值,使直方图更加均匀。

equalized_image = cv2.equalizeHist(image)
import cv2# 读取图像
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)# 直方图均衡化
equalized_image = cv2.equalizeHist(img)# 显示结果
cv2.imshow("Equalized Image", equalized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

4 颜色直方图

        对于彩色图像,可以分别计算每个颜色通道的直方图。

import cv2
from matplotlib import pyplot as plt# 读取图像
img = cv2.imread('image.jpg')# 计算 BGR 各通道的直方图
colors = ('b', 'g', 'r')
for i, color in enumerate(colors):hist = cv2.calcHist([img], [i], None, [256], [0, 256])plt.plot(hist, color=color)# 绘制直方图
plt.title("Color Histogram")
plt.xlabel("Pixel Intensity")
plt.ylabel("Pixel Count")
plt.show()

        对于彩色图像,可以对每个通道分别进行直方图均衡化。

import cv2# 读取图像
img = cv2.imread('image.jpg')# 分离通道
b, g, r = cv2.split(img)# 对每个通道进行直方图均衡化
b_eq = cv2.equalizeHist(b)
g_eq = cv2.equalizeHist(g)
r_eq = cv2.equalizeHist(r)# 合并通道
equalized_image = cv2.merge([b_eq, g_eq, r_eq])# 显示结果
cv2.imshow("Equalized Color Image", equalized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

5 直方图比较

        OpenCV 提供了 cv2.compareHist() 函数,用于比较两个直方图的相似度。

similarity = cv2.compareHist(hist1, hist2, method)
  • hist1: 第一个直方图。
  • hist2: 第二个直方图。
  • method: 比较方法,例如 cv2.HISTCMP_CORREL(相关性比较)。
import cv2# 读取图像
img = cv2.imread('image.jpg', 0)
image2 = cv2.imread('bird.jpg', 0)# 计算两个图像的直方图
hist1 = cv2.calcHist([img], [0], None, [256], [0, 256])
hist2 = cv2.calcHist([image2], [0], None, [256], [0, 256])# 比较直方图
similarity = cv2.compareHist(hist1, hist2, cv2.HISTCMP_CORREL)
print("Histogram Similarity:", similarity)

相关文章:

OpenCV(8):图像直方图

在图像处理中,直方图是一种非常重要的工具,它可以帮助我们了解图像的像素分布情况。通过分析图像的直方图,我们可以进行图像增强、对比度调整、图像分割等操作。 1 什么是图像直方图? 图像直方图是图像像素强度分布的图形表示&am…...

力扣LeetCode:1656 设计有序流

题目: 有 n 个 (id, value) 对,其中 id 是 1 到 n 之间的一个整数,value 是一个字符串。不存在 id 相同的两个 (id, value) 对。 设计一个流,以 任意 顺序获取 n 个 (id, value) 对,并在多次调用时 按 id 递增的顺序…...

NGINX配置TCP负载均衡

前言 之前本人做项目需要用到nginx的tcp负载均衡,这里是当时配置做的笔记;欢迎收藏 关注,本人将会持续更新 文章目录 配置Nginx的负载均衡 配置Nginx的负载均衡 nginx编译安装需要先安装pcre、openssl、zlib等库,也可以直接编译…...

vm和centos

安装 VMware Workstation Pro 1. 下载 VMware Workstation Pro 访问 VMware 官方网站(https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html ),在该页面中点击 “立即下载” 按钮,选择适合你操作…...

c#丰田PLC ToyoPuc TCP协议快速读写 to c# Toyota PLC ToyoPuc读写

源代码下载 <------下载地址 历史背景与发展 TOYOPUC协议源于丰田工机&#xff08;TOYODA&#xff09;的自动化技术积累。丰田工机成立于1941年&#xff0c;最初是丰田汽车的机床部门&#xff0c;后独立为专注于工业机械与控制系统的公司。2006年与光洋精工&#xff08;Ko…...

量子计算的数学基础:复数、矩阵和线性代数

量子计算是基于量子力学原理的一种新型计算模式,它与经典计算机在信息处理的方式上有着根本性的区别。在量子计算中,信息的最小单位是量子比特(qubit),而不是传统计算中的比特。量子比特的状态是通过量子力学中的数学工具来描述的,因此,理解量子计算的数学基础对于深入学…...

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter22-处理 XML

二十二、处理 XML 处理 XML XML 曾一度是在互联网上存储和传输结构化数据的标准。XML 的发展反映了 Web 的发展&#xff0c;因为DOM 标准不仅是为了在浏览器中使用&#xff0c;而且还为了在桌面和服务器应用程序中处理 XML 数据结构。在没有 DOM 标准的时候&#xff0c;很多开发…...

一个不错的API测试框架——Karate

Karate 是一款开源的 API 测试工具,基于 BDD(行为驱动开发)框架 Cucumber 构建,但无需编写 Java 或 JavaScript 代码即可直接编写测试用例。它结合了 API 测试、模拟(Mocking)和性能测试功能,支持 HTTP、GraphQL 和 WebSocket 等协议,语法简洁易读。 Karate详细介绍 K…...

文字语音相互转换

目录 1.介绍 2.思路 3.安装python包 3.程序&#xff1a; 4.运行结果 1.介绍 当我们使用一些本地部署的语言模型的时候&#xff0c;往往只能进行文字对话&#xff0c;这一片博客教大家如何实现语音转文字和文字转语音&#xff0c;之后接入ollama的模型就能进行语音对话了。…...

DeepSeek-R1:通过强化学习激发大语言模型的推理能力

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 DeepSeek大模型技术系列三DeepSeek大模型技术系列三》DeepSeek-…...

MATLAB中fft函数用法

目录 语法 说明 示例 含噪信号 高斯脉冲 余弦波 正弦波的相位 FFT 的插值 fft函数的功能是对数据进行快速傅里叶变换。 语法 Y fft(X) Y fft(X,n) Y fft(X,n,dim) 说明 ​Y fft(X) 用快速傅里叶变换 (FFT) 算法计算 X 的离散傅里叶变换 (DFT)。 如果 X 是向量&…...

【SpringBoot】【JWT】使用JWT的claims()方法存入Integer类型数据自动转为Double类型

生成令牌时使用Map存入Integer类型数据&#xff0c;将map使用claims方法放入JWT令牌后&#xff0c;取出时变成Double类型&#xff0c;强转报错&#xff1a; 解决&#xff1a; 将Integer转为String后存入JWT令牌&#xff0c;不会被自动转为其他类型&#xff0c;取出后转为Integ…...

Crack SmartGit

感谢大佬提供的资源 一、正常安装SmartGit 二、下载crackSmartGit crackSmartGit 发行版 - Gitee.com 三、使用crackSmartGit 1. 打开用户目录&#xff1a;C:\Users%用户名%\AppData\Roaming\syntevo\SmartGit。将crackSmartGit.jar和license.zip拷贝至 用户目录。 2. 用户…...

【备赛】在keil5里面创建新文件的方法+添加lcd驱动

一、先创建出文件夹和相应的.c和.h文件 因为在软件里面创建出的是在MDk文件那里面的&#xff0c;实际上是不存在你的新文件夹里的。 二、在keil5软件里面操作 1&#xff09;添加文件夹 -*---------------------------------------------------------- 这里最好加上相对路径&…...

Rk3568驱动开发_驱动实现流程以及本质_3

1设备号&#xff1a; cat /proc/devices 编写驱动模块需要要想加载到内核并与设备正常通信&#xff0c;那就需要申请一个设备号&#xff0c;用cat /proc/devices可以查看已经被占用的设备号 设备号有什么用&#xff1f;不同设备其驱动实现不同用设备号去区分&#xff0c;例如字…...

【学习笔记】LLM+RL

文章目录 1 合成数据与模型坍缩&#xff08;model collapse&#xff09;,1.1 递归生成数据与模型坍缩1.2 三种错误1.3 理论直觉1.4 PPL指标 2 基于开源 LLM 实现 O1-like step by step 慢思考&#xff08;slow thinking&#xff09;&#xff0c;ollama&#xff0c;streamlit2.1…...

深入理解IP子网掩码子网划分{作用} 以及 不同网段之间的ping的原理 以及子网掩码的区域划分

目录 子网掩码详解 子网掩码定义 子网掩码进一步解释 子网掩码的作用 计算总结表 子网掩码计算 子网掩码对应IP数量计算 判断IP是否在同一网段 1. 计算步骤 2. 示例 3. 关键点 总结 不同网段通信原理与Ping流程 1. 同网段通信 2. 跨网段通信 网段计算示例 3. P…...

rust 前端npm依赖工具rsup升级日志

rsup是使用 rust 编写的一个前端 npm 依赖包管理工具&#xff0c;可以获取到项目中依赖包的最新版本信息&#xff0c;并通过 web 服务的形式提供查看、升级操作等一一系列操作。 在前一篇文章中&#xff0c;记录初始的功能设计&#xff0c;自己的想法实现过程。在自己的使用过…...

2.2 STM32F103C8T6最小系统板的四种有关固件的开发方式

2.2.1 四种有关固件的开发方式 四种有关于固件的开发方式从时间线由远及近分别是&#xff1a;寄存器开发、标准外设驱动库开发、硬件抽象层库开发、底层库开发。 四种开发方式各有优缺点&#xff0c;可以参考ST官方的测试与说明。 1.寄存器开发 寄存器编程对于从51等等芯片过渡…...

【C++】 stack和queue以及模拟实现

一、stack及其模拟实现 1.1 stack介绍 stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行 元素的插入与提取操作。stack是作为容器适配器被实现的&#xff0c;容器适配器即是对特定类封装作为其底层的容器&am…...

SystemVerilog文件读写避坑指南:$fopen、$fscanf这些函数你真的用对了吗?

SystemVerilog文件读写避坑指南&#xff1a;$fopen、$fscanf这些函数你真的用对了吗&#xff1f; 在数字验证领域&#xff0c;SystemVerilog的文件操作功能就像一把双刃剑——用得好能极大提升验证效率&#xff0c;用不好则可能引发各种隐蔽问题。许多工程师在初次接触$fopen、…...

从扫地机器人到AGV:拆解双轮差速模型在CoppeliaSim中的ROS实战配置

从扫地机器人到AGV&#xff1a;双轮差速模型在CoppeliaSim中的ROS实战指南 当你在电商平台下单的扫地机器人完成一次完美的弓字形路径清扫时&#xff0c;背后是一套精密的双轮差速控制系统在发挥作用。这种看似简单的运动机制&#xff0c;实际上支撑着从家用清洁设备到工业AGV的…...

如何用5分钟彻底告别水印烦恼:全网资源下载终极指南

如何用5分钟彻底告别水印烦恼&#xff1a;全网资源下载终极指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是否曾经为…...

告别Flask和Django:用Streamlit 1.0+快速把你的Python数据分析脚本变成Web应用

告别Flask和Django&#xff1a;用Streamlit 1.0快速把你的Python数据分析脚本变成Web应用 数据分析师和机器学习工程师经常面临一个尴尬局面&#xff1a;花了大量时间开发出功能完善的Python脚本&#xff0c;却因为缺乏前端开发能力&#xff0c;无法将这些成果直观地展示给非技…...

NVIDIA Profile Inspector架构深度解析:驱动级性能优化技术揭秘

NVIDIA Profile Inspector架构深度解析&#xff1a;驱动级性能优化技术揭秘 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector作为一款专业的显卡驱动配置工具&#xff0c;通过直…...

南北阁 Nanbeige 4.1-3B 镜像部署:支持NVIDIA Triton推理服务器封装方案

南北阁 Nanbeige 4.1-3B 镜像部署&#xff1a;支持NVIDIA Triton推理服务器封装方案 想快速体验一个30亿参数的国产大模型&#xff0c;但又担心部署复杂、显存不够、或者交互体验太差&#xff1f;今天介绍的这款工具&#xff0c;或许能让你眼前一亮。 南北阁 Nanbeige 4.1-3B…...

SeqGPT-560M实操手册:审计底稿中‘被审计单位’‘问题描述’‘整改建议’三段式抽取

SeqGPT-560M实操手册&#xff1a;审计底稿中‘被审计单位’‘问题描述’‘整改建议’三段式抽取 1. 项目简介 SeqGPT-560M是一个专门为企业级信息抽取需求定制开发的高性能AI系统。与常见的聊天对话模型不同&#xff0c;这个系统专注于一件事&#xff1a;从复杂的非结构化文本…...

如何突破网盘下载速度限制?8大平台直链下载助手完全指南

如何突破网盘下载速度限制&#xff1f;8大平台直链下载助手完全指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…...

云原生×AI代码生成的“最后一公里”危机:SITS2026暴露的4类不可观测性盲区,运维团队已连夜升级eBPF探针

第一章&#xff1a;SITS2026案例&#xff1a;AI云原生代码生成 2026奇点智能技术大会(https://ml-summit.org) SITS2026&#xff08;Smart Intelligent Transformation Summit&#xff09;是面向企业级AI工程落地的年度技术实践峰会&#xff0c;其核心演示项目“CloudNativeG…...

HunyuanVideo-Foley私有部署镜像:RTX4090D 24G一键部署,5分钟搞定视频+音效生成

HunyuanVideo-Foley私有部署镜像&#xff1a;RTX4090D 24G一键部署&#xff0c;5分钟搞定视频音效生成 1. 为什么选择RTX4090D部署HunyuanVideo-Foley 在AI视频与音效生成领域&#xff0c;硬件配置直接决定了创作效率与质量。HunyuanVideo-Foley作为一款集视频生成与Foley音效…...