OpenCV 灰度直方图

一 直方图的定义,意义和特征

1 定义

在统计学中,直方图是一种对数据分布情况的图形表示,是一种二维统计图表,他的两个坐标分别是统计样本(图像、视频帧)和样本的某种属性(亮度,像素值,梯度,方向,色彩等等任何特征)
在这里插入图片描述

2 意义

(1)直方图是图像中像素强度分布的图形表达方式。

(2)直方图统计了每一个强度值所具有的像素个数。

3 特征

(1)直方图不再表征任何的图像纹理信息,而是对图像像素的统计。

(2)由于同一物体无论是旋转还是平移在图像中都具有相同的灰度值,因此直方图具有平移不变性、缩放不变性等优点。

4 方法和参数

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

(1)images : 整型类型(uint8和float32)的原图(list形式显示)。

(2)channels : 通道的索引,例如:[0]代表灰度图片,[0],[1],[2]代表多通道。

(3)mask : 计算图片指定区域的直方图。如果mask为none,那么计算整张图。

(4)histSize( bins ) : 每个色调值(范围: 0 ~ 255)对应的像素数量/频率。[这256个值中的每一个都被称为bin,它的取值有8,16,32,64,128,256。在OpenCV中,用histSize表示bins。]

(5)range : 强度值的范围,[0, 256]。

import cv2
import matplotlib.pyplot as plt
import numpy as np#显示图片
def show_image(image,title,pos):image_RGB=image[:,:,::-1]#shape:(height,width,channel)#显示标题plt.title(title)plt.subplot(2,3,pos)plt.imshow(image_RGB)#显示图片的灰度直方图
def show_histogram(hist,title,pos,color):#显示标题plt.title(title)plt.subplot(2,3,pos)#定位图片plt.xlabel("Bins")#横轴信息plt.ylabel("Pixels")#纵轴信息plt.xlim([0,256])#范围plt.plot(hist,color=color)#绘制直方图#主函数
def main():#创建画布plt.figure(figsize=(15,6))#画图大小plt.suptitle("Gray Image Histogram",fontsize=14,fontweight='bold')#设置标题img=cv2.imread("./2037551.jpg")img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)hist_img=cv2.calcHist([img_gray],[0],None,[256],[0,256])#展示灰度直方图#灰度图转换成BGR格式图片img_BGR=cv2.cvtColor(img_gray,cv2.COLOR_BGRA2BGR)show_image(img_BGR,"BGR image",1)show_histogram(hist_img,"gray image histogram",4,"m")M=np.ones(img_gray.shape,np.uint8)*50#构建矩阵added_img = cv2.add (img_gray, M)add_img_hist = cv2.calcHist ([added_img], [0], None, [256], [0, 256])  # 计算直方图added_img_BGR = cv2.cvtColor (added_img, cv2.COLOR_GRAY2BGR)show_image (added_img_BGR, "added image", 2)show_histogram (add_img_hist, "added image hist", 5, "m")# 11 对图片中的每个像素值减去50个像素subtract_img = cv2.subtract (img_gray, M)subtract_img_hist = cv2.calcHist ([subtract_img], [0], None, [256], [0, 256])  # 计算直方图subtract_img_BGR = cv2.cvtColor (subtract_img, cv2.COLOR_GRAY2BGR)show_image (subtract_img_BGR, "subtracted image", 3)show_histogram (subtract_img_hist, "subtracted image hist", 6, "m")plt.show ( )if __name__ == '__main__':main ( )

在这里插入图片描述

琐碎时间阅读基础知识,详情关注微信公众号“知识代码AI”。
在这里插入图片描述

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

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

相关文章

bugku-web-cookies

进来以后看到一个巨长的字符串, 源码同样,发现url后面是base64编码解码得keys.txt 还有一个line参数,修改并没有发生任何变化。我想不到要改keys.txt成index.php(base64加密格式:aW5kZXgucGhw) line1时: line2时&…

AcWing 802. 区间和

var说明add存储了插入操作,在指定 x x x下标所在位置 a [ x ] c a[x]c a[x]cquery是求 [ L , R ] [L,R] [L,R]区间和用到的数组,最后才用到alls 是存储离散化之后的值 , 对于会访问到的每个下标,统统丢到 a l l s 里面 ,会把 x 和 [ L , R …

基于深度学习的复杂策略学习

基于深度学习的复杂策略学习(Complex Strategy Learning)是通过深度学习技术,特别是强化学习和模仿学习,来开发和优化解决复杂任务的策略。这类技术广泛应用于自动驾驶、游戏AI、机器人控制和金融交易等领域。以下是对这一领域的系…

【Golang 面试 - 基础题】每日 5 题(七)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…

数据结构----算法复杂度

1.数据结构前言 数据是杂乱无章的,我们要借助结构将数据管理起来 1.1 数据结构 数据结构(Data Structure)是计算机存储、组织数据的⽅式,指相互之间存在⼀种或多种特定关系的数 据元素的集合。没有⼀种单⼀的数据结构对所有⽤途都有⽤,所…

设计模式补

适配器模式(Adapter Pattern) 适配器类继承A目标接口,把B非适配器类当适配器类的参数,用适配器类使用A目标接口的方法 是一种结构型设计模式,它的主要目的是使原本接口不兼容的类可以一起工作。适配器模式通过创建一个适配器类来包装现有类…

查看路由表 netstat -r

“Kernel IP routing table” 是Linux系统中用于展示和配置IP路由的表。它告诉操作系统如何将数据包从一个网络接口发送到另一个网络或主机。下面是对您给出的路由表条目的解释: Destination:目的地地址,可以是具体的IP地址,也可…

C#:通用方法总结—第8集

大家好,今天继续讲解我们的通用方法系列。 下面是今天分享的通用方法: (1)这个通用方法为Ug删除参数构建器方法: public static int RemoveParameters(int id)//删除参数构建器 { UFSession.GetUFSession().Undo.Se…

Android 一个简单线程更新UI

new Thread(new Runnable() {Overridepublic void run() {//执行的业务runOnUiThread(new Runnable() {Overridepublic void run() {//更新UI//Loading("信息处理中");}});} }).start();

Vue3学习总结-v-if与v-show的使用案例和区别

📊 Vue 3 实战:v-if 与 v-show 在用户界面切换中的应用 在 Vue.js 中,v-if 和 v-show 是两种常用的条件渲染指令,它们允许我们根据表达式的值来动态地显示或隐藏 DOM 元素。这两种指令虽然看起来相似,但在内部实现和性…

ctfshow解题方法

171 172 爆库名->爆表名->爆字段名->爆字段值 -1 union select 1,database() ,3 -- //返回数据库名 -1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema库名 -- //获取数据库里的表名 -1 union select 1,group_concat(…

WebGIS学习——Cesium|Javascript

1.Cesium学习什么:Cesium实战项目说明-CSDN博客 2.Cesium绘制图形(箭头等):Cesium 态势标绘 _cesium态势标绘-CSDN博客 3.CesiumThree集成 4.Cesium深度图相关:Cesium离屏渲染深度图实验_cesium 离屏渲染-CSDN博客 5.洪涝:cesium淹没分析…

Github 2024-07-25 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Testify - Go代码测试工具包 创建周期:4237 天开发语言:Go协议类型:MIT LicenseStar数量:22206 个Fork数量:1550 次关注人数:222…

TCP连接中的过程状态解析

TCP建立连接三次握手的过程 TCP是一个面向连接的协议,所以在连接双方发送数据之前,都需要首先建立一条连接。 Client连接Server三次握手过程: 当Client端调用socket函数调用时,相当于Client端产生了一个处于Closed状态的套接字…

Python爬虫入门02:Fiddler下载使用教程

文章目录 手机抓包全攻略:Fiddler 工具深度解析引言Fiddler 工具简介为什么选择 Fiddler? 安装与配置 Fiddler步骤一:下载与安装步骤二:配置浏览器代理步骤三:安装 HTTPS 证书 配置手机以使用 Fiddler步骤一&#xff1…

操作系统面试知识点总结5

#来自ウルトラマンメビウス(梦比优斯) 1 IO管理概述 1.1 I/O 设备 I/O 设备的类型分类。 1.1.1 按使用特性 人机交互类外部设备,例如打印机、显示器等。存储设备,例如磁盘、光盘等。网络通信设备,例如网络接口等。 1…

PHP While循环

PHP 中的 while 循环是一种基本的循环控制结构,它允许你重复执行一段代码块,直到指定的条件不再满足为止。while 循环在需要执行未知次数的代码块时非常有用,特别是当你需要在满足特定条件时继续执行循环时。 基本语法 while (条件表达式) …

21 B端产品经理之技术常识(1)

产品经理需要掌握一些基本的技术知识。 了解公司前端与后端 前端 前端开发:创建WEB页面或APP等前端界面呈现给用户的过程,即前端负责用户界面交互。 前端技能: HTML:一种标记语言,能够实现Web页面并在浏览器中显示。…

【计算机网络】IP地址和子网掩码(IP地址篇)

个人主页:【😊个人主页】 系列专栏:【❤️计算机网络】 文章目录 前言IP地址网络地址网络地址的定义与组成作用分类网络地址的分配与管理 广播地址(Broadcast Address)定义构成类型作用注意事项 广播地址功能 组播地址…

HiveSQL题——炸裂+开窗

一、每个学科的成绩第一名是谁? 0 问题描述 基于学生成绩表输出每个科目的第一名是谁呢? 1 数据准备 with t1 as(selectzs as name,[{"Chinese":80},{"Math":70}],{"English"…