[Python] opencv - 什么是直方图?如何绘制图像的直方图?如何对直方图进行均匀化处理?

什么是直方图?

直方图是一种统计图,用于展示数据的分布情况。它将数据按照一定的区间或者组进行划分,然后计算在每个区间或组内的数据频数或频率(即数据出现的次数或占比),然后用矩形或者柱形图的形式将这些频数或频率表示出来。横轴表示数据的区间或组,纵轴表示频数或频率,通过矩形或柱形的高度来表示频数或频率的大小。直方图可以用于直观地展示数据的分布情况,分析数据的集中趋势、离散程度和异常值等。

什么是图像直方图?

图像直方图是用来表示数字图像亮度或颜色分布的统计图。它可以显示图像中每个像素值或像素值范围的频数或频率。图像直方图以横轴表示像素值,纵轴表示像素值的频数或频率。对于灰度图像,直方图展示了每个像素值出现的次数或占比。对于彩色图像,可以将图像分解为红、绿、蓝通道,每个通道的直方图分别表示了该通道像素值的分布情况。

图像直方图可以提供有关图像亮度或颜色分布的重要信息。例如,在灰度图像中,直方图的形状可以反映图像的对比度和明暗程度。在彩色图像中,通过分析不同通道的直方图,可以了解图像的色彩分布情况,例如颜色偏移、色彩饱和度等。图像直方图在图像处理和计算机视觉中广泛应用,用于图像增强、颜色分析、图像检索等任务中。

opencv的calcHist函数介绍

cv2.calcHist()函数是OpenCV中用于计算图像直方图的函数。它的语法如下:

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

参数解释:

  • images:输入的图像,可以是一个图像或图像列表。
  • channels:用于计算直方图的通道编号,如果输入的图像是灰度图像,则通道值为[0];如果是彩色图像,通道值可以是[0]、[1]或[2],分别表示B、G、R通道。
  • mask:可选参数,用于指定感兴趣区域。如果不提供,则计算整个图像的直方图。
  • histSize:直方图的桶数,表示直方图的分组数量。
  • ranges:直方图的像素值范围,通常为[0, 256]。
  • hist:可选参数,用于存储计算得到的直方图。
  • accumulate:可选参数,用于指定是否累加直方图。

返回值:

  • hist:计算得到的直方图。

cv2.calcHist()函数会根据指定的通道和大小,计算输入图像的直方图。可以通过调整参数来计算灰度图像或彩色图像的直方图。计算得到的直方图可以用于图像处理、分析和可视化等应用。

如何灰度图像的直方图?

在Python中,可以使用matplotlib库 + opencv库来绘制灰度图像的直方图。下面是一个简单的示例:

import cv2
import matplotlib.pyplot as plt# 读取灰度图像
image = cv2.imread('2_0_2_2170.png', 0)# 计算直方图
histogram = cv2.calcHist([image], [0], None, [256], [0, 256])# 绘制直方图
plt.figure()
plt.title('Histogram')
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')
plt.plot(histogram)
plt.xlim([0, 256])
plt.show()

在上面的示例中,我们首先使用cv2.imread()函数读取灰度图像。然后,使用cv2.calcHist()函数计算图像的直方图。该函数接受以下参数:图像(以数组的形式传递,所以使用方括号括起来),通道(如果是灰度图像,通道为[0]),掩码(用于指定对哪些像素计算直方图,None表示计算整个图像的直方图),直方图的bin数(256表示每个像素值都有一个bin),像素值范围([0, 256]表示像素值的范围)。最后,使用matplotlib.pyplot库绘制直方图,设置标题、x轴、y轴标签,以及绘制直方图的范围。

运行以上代码,将会显示灰度图像的直方图。你可以根据实际情况修改代码中的图像路径和参数,来绘制不同灰度图像的直方图。

如何绘制彩色图像的直方图?

import cv2
import matplotlib.pyplot as plt# 读取彩色图像
image = cv2.imread('beauty_01.jpg')# 将图像从BGR颜色空间转换为RGB颜色空间
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 将图像展平为一维数组
pixels = image_rgb.reshape(-1, 3)# 绘制直方图
plt.figure()
plt.title('Histogram')
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')
colors = ('r', 'g', 'b')
for i, color in enumerate(colors):histogram = cv2.calcHist([image_rgb], [i], None, [256], [0, 256])plt.plot(histogram, color=color)plt.xlim([0, 256])
plt.show()

在上述示例中,我们首先使用cv2.imread()函数读取彩色图像。然后,使用cv2.cvtColor()函数将图像从BGR颜色空间转换为RGB颜色空间。接下来,我们使用reshape()函数将图像展平为一维数组,以便于计算直方图。然后,使用cv2.calcHist()函数计算每个颜色通道的直方图。最后,使用matplotlib.pyplot库绘制直方图,设置标题、x轴、y轴标签,以及为每个颜色通道分别绘制直方图。

运行以上代码,将会显示彩色图像的直方图。你可以根据实际情况修改代码中的图像路径和参数,来绘制不同彩色图像的直方图。

什么是直方图均衡化?

直方图均衡化是一种图像处理技术,用于增强图像的对比度。 它通过重新分配图像的灰度级,使得原始图像中灰度级较少的区域在整个灰度范围内更均匀地分布。直方图均衡化可以增加图像的视觉效果和细节,并用于图像增强、图像分割、图像识别等应用中。

如何进行直方图均衡化?

opencv中,可以通过equalizeHist函数来进行灰度图的直方图均衡化。

cv2.equalizeHist()函数是OpenCV中用于直方图均衡化的函数。它将输入图像的直方图进行均衡化,以提升图像的对比度和亮度。

该函数的语法如下:

dst = cv2.equalizeHist(src)

参数说明:

  • src:输入图像,可以是灰度图像或彩色图像。

返回值:

  • dst:均衡化后的图像。

函数的工作原理如下:

  1. 计算输入图像的直方图。
  2. 计算直方图的累积分布函数(Cumulative Distribution Function,CDF)。
  3. 根据CDF对输入图像进行像素值的映射,将较暗的像素值转化为较亮的像素值,以实现直方图均衡化。
  4. 返回均衡化后的图像。

直方图均衡化可以提高图像的对比度,使得图像中的细节更加清晰。它常用于图像增强、视觉处理和计算机视觉中的预处理步骤。

使用案例:

import cv2# 读取图像
image = cv2.imread('beauty_01.jpg', cv2.IMREAD_GRAYSCALE)  # 以灰度模式读取图像# 进行直方图均衡化
equalized_image = cv2.equalizeHist(image)# 显示原始图像和均衡化后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Equalized Image', equalized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/672263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Docker极简教程》--Docker环境的搭建--在Mac上搭建Docker环境

在Mac上搭建Docker环境,可以提供一个可靠的容器化开发和部署平台。下面将详细介绍在Mac上搭建Docker环境的步骤、注意事项和常见问题解决方法。 一、步骤 在Mac上搭建Docker环境的步骤如下: 下载Docker Desktop:Docker Desktop是适用于Mac…

Python(20)正则表达式(Regular Expression)中常用函数用法

大家好!我是码银🥰 欢迎关注🥰: CSDN:码银 公众号:码银学编程 正文 正则表达式 粗略的定义:正则表达式是一个特殊的字符序列,帮助用户非常便捷的检查一个字符串是否符合某种模…

5.electron之主进程起一个本地服务

如果可以实现记得点赞分享,谢谢老铁~ Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中,因此它允许你仅需一个代码仓库,就可以撰写支持 Windows、…

Python_百度贴吧评论情感分析

一、评论爬取 以百度贴吧中“美团骑手吧”为例,对页面中的帖子评论进行爬取,并将结果以json的格式保存到本地中。 from lxml import etree import requests import json# 根据网页url获取评论 def GetComments(url):# 使用requests库发送GET请求&#…

背包dp第六讲:混合背包板子及例题

特征 混合背包,就是把01,完全,多重背包混合起来 物品一共有三类: 第一类物品只能用1次(01背包); 第二类物品可以用无限次(完全背包); 第三类物品最多只能用…

Multisim14.0仿真(五十五)汽车转向灯设计

一、功能描述: 左转向:左侧指示灯循环依次闪亮; 右转向:右侧指示灯循环依次闪亮; 刹车: 所有灯常亮; 正常: 所有灯熄灭。 二、主要芯片: 74LS161D 74LS04D 74…

获取对象边及边对应的顶点索引

开发环境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example demo解决问题&#xff1a;获取对象边及边对应的顶点索引 prj name: CellEdges #include <vtkIdList.h> #include <vtkNew.h> #include <vtkPoint…

谁是嫌疑犯问题

问题描述&#xff1a; 有6名犯罪嫌疑人A、B、C、D、E、F&#xff0c;已知如下事实&#xff1a; A、B至少有1人作案&#xff1b; A、E、F三人中至少有2人参与作案&#xff1b; A、D不可能是同案犯&#xff1b; B、C或同时作案&#xff0c;或与本案无关&#xff1b; C、D中…

爱情终结,旅程重启:独自征服拉萨与四姑娘山

爱情&#xff0c;是人生中一段充满激情和期待的旅程&#xff0c;然而有时它也会成为人生中一场无法避免的终结。当爱情逝去&#xff0c;留下的是一片空虚和失落&#xff0c;但或许正是在这片失落中&#xff0c;我找到了重新定义自我的机会。独自踏上旅途&#xff0c;成为了越来…

Kubernetes CNI Calico:Route Reflector 模式(RR) calico IPIP切换RR网络模式

1. 概述 Calico 路由反射模式是一种 BGP 互联方案,用于解决大规模网络中路由信息的分发和同步问题。在 Calico 的路由反射模式中,路由反射器(Route Reflectors)被用来集中管理路由信息,以减少网络中的路由信息数量和减小路由信息的分发规模。 在 Calico 的路由反射模式中…

[office] Excel如何快速统一数字编号长度 #经验分享#其他

Excel如何快速统一数字编号长度 我们在办公室使用Excel统计数据的时候&#xff0c;经常会遇到第一列数据全部是数字编号&#xff0c;但是因为数字的位数不一样&#xff0c;长短不一的样子看起来不是很协调。那么如何快速统一数字编号长度呢&#xff1f;一起来了解一下吧 我们在…

mac电脑快捷指令实现拼图

mac访达&#xff0c;搜索输入‘快捷指令’&#xff0c;找到‘快捷指令’&#xff0c; 点击快捷指令&#xff0c;进入快捷指令中心&#xff0c;搜索‘拼图’ &#xff0c;选中‘照片拼图’&#xff0c; 点击‘添加快捷指令’&#xff0c; 在‘所有快捷键指令’中可以看到添加的快…

五大架构风格之三:独立构件风格

独立构件风格介绍&#xff1a; 独立构件风格&#xff08;模块化、组件化、分布式组件&#xff09;是一种软件架构风格&#xff0c;其中系统被划分为一组相互协作但逻辑上独立的构件。每个构件在设计时都具有清晰的接口和职责&#xff0c;可以在运行时独立部署、升级而不影响整个…

【chromium】windows构建base库 3:gn + vs2022 args 设置及debug x86 构建

GN 构建配置GN 构建配置 此页面提供了 GN 构建的一些常见构建设置。它假设您已经获得了 Chromium checkout。 也可以看看 从命令行运行“gn help”。 所有 GN 文档 GN 快速入门指南 GN 参考 (一个网页中“gn help”中所有内容的转储)。 了解 GN 构建标志 回想一下,在 GN …

tomcat部署zrlog

1.下载zrlog包&#xff0c;并添加到虚拟机中 1)进入/opt/apache-tomcat-8.5.90/webapps目录 cd /opt/apache-tomcat-8.5.90/webapps2)下载zrlog包 wget http://dl.zrlog.com/release/zrlog-1.7.1-baaecb9-release.war 3)重命名包 mv zrlog-1.7.1-baaecb9-release zrblog 2…

【Linux】环境基础开发工具的使用之gdb详解(三)

前言&#xff1a;上一篇文章中我们讲解了Linux下的gcc与g的使用&#xff0c;今天我们将进一步的学习gdb与makefile来帮我们更好的理解与使用基础开发工具。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:Linux的深度刨析 &#x1f448; …

R语言入门笔记2.2

ifelse语句 结构&#xff1a;ifelse(条件,表达式1,表达式2) #满足条件&#xff0c;则进入表达式1&#xff0c;否则为表达式2 例1&#xff1a; > a1 > ifelse(a<0,"a小于0",ifelse(a0,0,"a大于0")) [1] "a大于0"a1 - 这行代码给变量a…

从零开始手写mmo游戏从框架到爆炸(六)— 消息处理工厂

就好像门牌号一样&#xff0c;我们需要把消息路由到对应的楼栋和楼层&#xff0c;总不能像菜鸟一样让大家都来自己找数据吧。 首先这里我们参考了rabbitmq中的topic与tag模型&#xff0c;topic对应类&#xff0c;tag对应方法。 新增一个模块&#xff0c;专门记录路由eternity-…

【类与对象(中)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 1.类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 引用 常引用 5.赋值运算符重载 5.1…

几个MySQL系统调优工具

几个MySQL系统调优工具 可以使用下面几个工具来做基准测试&#xff1a; sysbench&#xff1a;一个模块化&#xff0c;跨平台以及多线程的性能测试工具。 https://github.com/akopytov/sysbench iibench-mysql&#xff1a;基于Java的MySQL / Percona / MariaDB 索引进行插入性能…