直方图与均衡化

直方图

统计图像中相同像素点的数量。
使用cv2.calcHist(images, channels, mask, histSize, ranges)函数

images:原图像图像格式为uint8或float32,当传入函数时应用[]括起来,例如[img]。
channels:同样用中括号括起来,告诉我们统幅图像的直方图,如果图像是灰度图就是[0],如果是彩色图可以是[0],[1],[2],分别对应BGR。
mask:掩膜图像,统幅图像使用None,若使用一部分需要自行制作。
histSize:BIN的数目,也要中括号。
ranges:像素值范围一般为[0,256]

灰度图

img = cv2.imread('deppb.jpg', 0)
show.cv_show('img', img)
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
h1 = hist.shape
plt.hist(img.ravel(), 256)
plt.show()

灰度图
在这里插入图片描述
直方图
在这里插入图片描述

彩色图

img2 = cv2.imread('deppb.jpg')
show.cv_show('img2', img2)
color = ('b', 'g', 'r')
for i, col in enumerate(color):histr = cv2.calcHist([img2], [i], None, [256], [0, 256])plt.plot(histr, color=col)plt.xlim([0, 256])
plt.show()

彩色图
在这里插入图片描述
直方图
在这里插入图片描述
图为三通道的直方图

mask操作

mask,在指定区域置为255,其余区域置为0,与原图相与,最后得到指定区域的像素点个数统计,绘制直方图。

# 创建mask
show.cv_show('img2', img2)  # 原图
mask = np.zeros(img2.shape[:2], np.uint8)
print(mask.shape)
mask[200: 600, 100: 427] = 255
show.cv_show('mask', mask)  # mask图masked_img2 = cv2.bitwise_and(img2, img2, mask=mask)
show.cv_show('masked_img2', masked_img2)  # 原图与maskhist_full = cv2.calcHist([img2], [0], None, [256], [0, 256])
hist_mask = cv2.calcHist([img2], [0], mask, [256], [0, 256])
plt.plot(hist_full), plt.plot(hist_mask)  # [0]通道直方图对比
plt.show()

mask图
在这里插入图片描述
mask与原图相与
在这里插入图片描述
[0]通道直方图对比
在这里插入图片描述
蓝色为整体直方图,橙色为特定区域直方图。

均衡化

将一副图像的直方图分布通过累积分布函数变成近似均匀分布,从而增强图像的对比度。
在这里插入图片描述
根据像素点个数得到概率值,再算出累积概率类似于分布函数,再由累积概率映射出新的像素值,最后取整。

img3 = cv2.imread('deppb.jpg', 0)
plt.hist(img3.ravel(), 256)  # 原图直方图
plt.show()equ = cv2.equalizeHist(img3)
plt.hist(equ.ravel(), 256)  # 均衡化后直方图
plt.show()res = np.hstack((img3, equ))
show.cv_show('res', res)    # 图像对比

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到整体均衡化可能导致部分信息丢失。

自适应均衡化

其实是分区域进行均衡化,减少信息丢失。

clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))  # 方法
res_clahe = clahe.apply(img3)
plt.hist(res_clahe.ravel(), 256)  # 自适应均衡化后直方图
plt.show()
res = np.hstack((img3, equ, res_clahe))     # 与原图和整体均衡化对比
show.cv_show('res', res)

自适应均衡化的直方图
在这里插入图片描述

对比图
在这里插入图片描述
可以看到对比度加强而且信息丢失得到改善。

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

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

相关文章

准备用vscode代替sourceinsight

vscode版本1.85.1 有的符号,sourceinsight解析不到。 看网上说vscode内置了ripgrep,但ctrlshiftf在文件里查找的时候,速度特别慢,根本不像ripgrep的速度。ripgrep的速度是很快的。 但今天再查询,速度又很快了&#x…

Java内存模型(JMM)详解

1. 介绍 1.1 JMM概述 Java内存模型(Java Memory Model简称JMM)是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的…

Vue2+element-ui 实现select选择器结合Tree树形控件实现下拉树效果

效果&#xff1a; DOM部分 &#xff1a; // 设置el-option隐藏的下拉选项&#xff0c;选项显示的是汉字label&#xff0c;值是value // 如果不设置一个下拉选项&#xff0c;下面的树形组件将无法正常使用 <el-form-item label"报警区域" prop"monitorId"…

ACM32F403/F433 12 位多通道国产芯片,支持 MPU 存储保护功能,应用于工业控制,智能家居等产品中

ACM32F403/F433 芯片的内核基于 ARMv8-M 架构&#xff0c;支持 Cortex-M33 和 Cortex-M4F 指令集。芯片内核 支持一整套DSP指令用于数字信号处理&#xff0c;支持单精度FPU处理浮点数据&#xff0c;同时还支持Memory Protection Unit &#xff08;MPU&#xff09;用于提升应用的…

stm32中的i2c协议

stm32中I2C 文章目录 stm32中I2CI2C 协议简介I2C物理层协议层I2C基本读写过程 **通讯的起始和停止信号****数据有效性****地址及数据方向****响应** STM32的I2C特性及架构**STM32** **的** I2C外设简介STM32 的 I 2C 架构剖析通讯引脚 通讯过程主发送器主接收器 I2C初始化结构体…

隧道代理HTTP工作原理:一场奇妙的网络魔法表演

嘿&#xff0c;小伙伴们&#xff01;今天我们要一起探索一个有趣的话题——隧道代理HTTP的工作原理。这不是普通的表演&#xff0c;而是一场奇妙的网络魔法表演&#xff01; 首先&#xff0c;让我们想象一下&#xff0c;网络世界就像一个大舞台&#xff0c;而我们每个人都是这…

mysql日志报错报错:Bad handshake

MySQL版本&#xff1a;5.7.4 mysql日志报错如下 导致数据库报错的原因是客户端那边是java程序启用了ssl连接&#xff0c;java程序日志如下 原因是&#xff1a; MySQL 5.5.45&#xff0c; 5.6.26和5.7.6的要求&#xff0c;如果没有设置显式选项&#xff0c;则必须默认建立SSL…

Linux升级指南:保持系统安全和高效运行

Linux系统的升级是确保系统稳定和安全性的重要步骤。本文将介绍Linux系统升级的基本概念&#xff0c;以及具体的操作步骤和注意事项&#xff0c;以帮助用户顺利升级他们的Linux系统。 Linux操作系统以其稳定性和可定制性而闻名&#xff0c;它经常通过升级来提供新的功能、修复漏…

[Angular] 笔记 18:Angular Router

Angular Router 视频 chatgpt&#xff1a; Angular 具有内置的大量工具、功能和库&#xff0c;功能强大且经过良好设计&#xff0c;如组件化架构、依赖注入、模块化系统、路由和HTTP客户端等。这些功能可以直接用于项目中&#xff0c;无需额外的设置或第三方库。这简化了开发流…

MyBatis标签及其应用示例

MyBatis标签及其应用示例 1. select 1.1 标签属性 id唯一的标识符parameterType传给此语句的参数的全路径名或别名如&#xff1a;com.xxx.xxx.demo.entity.User或userresultType语句返回值类型或别名。如果是集合List&#xff0c;此处填写集合的泛型T&#xff0c;而不是集合…

三台CentOS7.6虚拟机搭建Hadoop完全分布式集群(二)

这个是笔者大学时期的大数据课程使用三台CentOS7.6虚拟机搭建完全分布式集群的案例&#xff0c;已成功搭建完全分布式集群&#xff0c;并测试跑实例。 6.安装JDK 以下操作现在master上操作&#xff0c;然后远程复制到slave01、slave02即可。 6.1 将压缩包发送到master节点机…

Spring-6-事务管理

事务是构建可靠企业级应用程序的最关键部分之一。 最常见的事务类型是数据库操作。 在典型的数据库更新操作中&#xff0c;首先数据库事务开始&#xff0c;然后数据被更新&#xff0c;最后提交或回滚事务(根据数据库操作的结果而定)。但是&#xff0c;在很多情况下&#xff0…