一、直方图相关学习

1、灰度直方图

1.1 基本概念和作用

表示图像中每个灰度级别的像素数量。用于分析图像的亮度分布情况。

1.2 代码示例

参数介绍

hist = cv2.calcHist(images, channels, mask, histSize, ranges, hist, accumulate)-images:输入图像的列表。对于灰度图像,它只包含一个元素(即一幅图像)。对于彩色图像,通常会传入一个包含所有颜色通道的列表。
-channels:指定要统计直方图的通道。对于灰度图像,值为[0];对于彩色图像,可以传入[0][1][2]分别表示蓝、绿、红通道。如果是彩色图像,也可以同时统计多个通道,例如[0, 1, 2]表示统计所有通道。
-mask:可选参数,用于指定计算直方图的区域。如果不需要指定区域,传入None
-histSize:指定直方图的大小,即灰度级别的个数。对于灰度图像,通常设置为256,表示从0255的灰度级别。对于彩色图像,可以设置为256,表示每个通道的灰度级别。
-ranges:指定像素值的范围。通常为[0, 256],表示灰度级别的范围。对于彩色图像,例如[0, 256, 0, 256, 0, 256]表示三个通道各自的范围。
-hist:可选参数,用于存储计算得到的直方图。如果不提供,函数会返回直方图
-accumulate:

示例

import cv2
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread('../images/1.jpg', cv2.IMREAD_GRAYSCALE)# 计算灰度直方图
hist = cv2.calcHist([image], [0], None, [256], [0, 256])# 显示原图
plt.subplot(2, 1, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')# 显示灰度直方图
plt.subplot(2, 1, 2)
plt.plot(hist)
plt.title('Grayscale Histogram')
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')# 调整子图布局,避免重叠
plt.tight_layout()# 显示图像和直方图
plt.show()

这里是引用

2、BGR直方图

2.1 基本概念和作用

BGR直方图是一种用于可视化彩色图像中蓝色(Blue)、绿色(Green)和红色(Red)三个通道的像素值分布情况的工具。了解图像中颜色的分布情况。通过分析BGR直方图,可以得知图像中某个颜色通道的强度,从而更好地理解图像的颜色特性。

2.2 代码示例

import cv2
import matplotlib.pyplot as plt# 读取彩色图像
image = cv2.imread('../images/2.jpg')# 分离通道
b, g, r = cv2.split(image)# 计算各通道的直方图
hist_b = cv2.calcHist([b], [0], None, [256], [0, 256])
hist_g = cv2.calcHist([g], [0], None, [256], [0, 256])
hist_r = cv2.calcHist([r], [0], None, [256], [0, 256])# 显示彩色图像
plt.subplot(2, 1, 1)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Original Image')# 显示BGR直方图
plt.subplot(2, 1, 2)
plt.plot(hist_b, color='blue', label='Blue')
plt.plot(hist_g, color='green', label='Green')
plt.plot(hist_r, color='red', label='Red')
plt.title('BGR Histogram')
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')
plt.legend()# 调整子图布局,避免重叠
plt.tight_layout()
# 显示图像和直方图
plt.show()

这里是引用

3、灰度直方图均衡

1. 基本概念和作用

用于增强图像对比度的技术,通过调整图像中各个灰度级别的像素分布,使得整个灰度范围更均匀地覆盖,从而提高图像的视觉质量。这个过程可以使暗部和亮部细节更加清晰可见,改善图像的视觉效果。

2. 代码示例

import cv2
import matplotlib.pyplot as plt# 读取灰度图像
image = cv2.imread('../images/3.jpg', cv2.IMREAD_GRAYSCALE)# 进行灰度直方图均衡
equalized_image = cv2.equalizeHist(image)# 显示原始灰度图像
plt.subplot(2, 1, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Grayscale Image')# 显示均衡后的灰度图像
plt.subplot(2, 1, 2)
plt.imshow(equalized_image, cmap='gray')
plt.title('Equalized Grayscale Image')# 调整子图布局,避免重叠
plt.tight_layout()# 显示图像
plt.show()

在这里插入图片描述

4、直方图变换(查找)

4.1 基本概念和作用

直方图变换,也称为直方图查找,是一种用于调整图像对比度的技术。它通过变换图像的灰度级别,将原始图像的灰度分布均匀化,使得图像中所有灰度级别的像素值分布更加平均。这样可以增强图像的对比度,使细节更加突出,提高图像的视觉质量。
直方图变换的核心思想是调整图像中各个灰度级别的像素值,使得灰度值的分布更均匀,从而实现对比度的增强。

4.2 代码示例

# 1 导入库
import cv2
import matplotlib.pyplot as plt
import numpy as np# 2 方法:显示图片
def show_image(image, title, pos):#  顺序转换:BGR TO RGBimage_RGB = image[:, :, ::-1]  # shape : (height, width, channel)# 显示标题plt.title(title)plt.subplot(2, 3, pos)  # 定位plt.imshow(image_RGB)# 3 方法:显示图片的灰度直方图
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)  # 绘制直方图# 4 主函数 main()
def main():# 5 创建画布plt.figure(figsize=(15, 6))  # 画布大小plt.suptitle("Gray Image Histogram", fontsize=14, fontweight="bold")  # 设置标题形式# 6 加载图片img = cv2.imread("../images/4.jpg")# 7 灰度转换img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 8 计算灰度图的直方图hist_img = cv2.calcHist([img_gray], [0], None, [256], [0, 256])# 9 展示灰度直方图# 灰度图转换成BGR格式图片img_BGR = cv2.cvtColor(img_gray, cv2.COLOR_GRAY2BGR)show_image(img_BGR, "BGR image", 1)show_histogram(hist_img, "gray image histogram", 4, "m")# 10 对图片中的每个像素值增加50个像素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()

图片中每个像素都增加五十个像素和减少五十像素的效果
在这里插入图片描述

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

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

相关文章

Prometheus安装

一、Prometheus的简介 Prometheus是一种开源的监控和警报工具,用于收集、存储和查询各种系统和服务的指标数据。它具有灵活的查询语言和强大的可视化功能,可用于实时监控应用程序性能和状态。 二、Prometheus下载 1、官网下载地址 下载Prometheus 2、P…

【regex】正则表达式

集合 [0-9.] [0-9.\-] 例子 正则表达式,按照规则写,写的时候应该不算困难,但是可读性差 不同语言中regex会有微小的差异 vim 需要转义, perl/python中不需要转义 锚位 \b am\b i am 命名 / 命名捕获组 ( 捕获组(…

167基于matlab的根据《液体动静压轴承》编写的有回油槽径向静压轴承的程序

基于matlab的根据《液体动静压轴承》编写的有回油槽径向静压轴承的程序,可显示承载能力、压强、刚度及温升等图谱.程序已调通,可直接运行。 167 显示承载能力、压强、刚度及温升 (xiaohongshu.com)https://www.xiaohongshu.com/explore/65d212b200000000…

numpy模块:从基础到高级的完整指南【第88篇—NumPy数组操作】

numpy模块:从基础到高级的完整指南 在Python的科学计算领域,NumPy模块是一个不可或缺的利器。它提供了丰富的数学函数和矩阵操作,使得数据处理、分析和科学计算变得更加高效。本文将带你初步了解NumPy模块,并通过实例代码深入解析…

2.17日学习打卡----初学Dubbo(二)

2.17日学习打卡 目录: 2.17日学习打卡一. Dubbo入门案例需求介绍配置开发环境dubbo-producerdubbo-consumer运行测试IDEA开启DashBoard面板 二. Dubbo高级特性序列化协议安全地址缓存超时时间与配置覆盖关系重试机制多版本负载均衡集群容错服务降级服务限流原理服务限流实现结果…

[深度学习] 深入理解什么是卷积神经网络

​ 🌈 博客个人主页:Chris在Coding 🎥 本文所属专栏:[深度学习] ❤️ 热门学习专栏:[Linux学习] ⏰ 我们仍在旅途 目录 1.卷积的定义 2.卷积的"卷"在哪里 3.什么又是卷积神…

Kerberos认证详解

对于Kerberos认证,可以大概如下图: 但是如果是详细的话,Kerberos认证过程可以分为三个部分,六个过程 1.AS-REQ&&AS-REP 1.AS-REQ 当域内某个用户输入了账号或者密码的时候,客户端就会发送一个authenticator…

企业大宽带服务器用哪里最合适

如今,数字经济的发展速度不断加快,进入数字化跑道的企业,每天都在大量输出、共享、存储数字内容,想要更高效、安全地让用户看到内容,企业的服务器需要满足大带宽、低延时、高并发等要求。 中小企业受限于资金、资源等…

【教程】Linux使用aria2c多线程满速下载

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 安装aria2c&#xff1a; sudo apt-get install aria2多线程下载&#xff1a; aria2c -x 16 -s 16 <url> 比如&#xff1a; aria2c -x 16 -s 16 http://images.cocodataset.org/zips/test2017.zip

白话微机:8.解释FPGA以及一些考研面试问题

一. 前言&#xff08;更新世界观&#xff09; 在“微机世界”&#xff0c;普通的城市(单片机)里&#xff0c;人又有一个别的名字叫做“数据”&#xff0c;人有0有1&#xff1b;人们也有住房&#xff0c;这些住房在这个世界叫做“存储器”&#xff1b;地上有路&#xff0c;这些路…

mmap映射文件使用示例

mmap 零拷贝技术可以应用于很多场景&#xff0c;其中一个典型的应用场景是网络文件传输。 假设我们需要将一个大文件传输到远程服务器上。在传统的方式下&#xff0c;我们可能需要将文件内容读入内存&#xff0c;然后再将数据从内存复制到网络协议栈中&#xff0c;最终发送到远…

【点云】生成有凹凸的平面

文章目录 前言高斯函数原理代码保存 测试测试1 &#xff1a;领域曲率代码测试2&#xff1a;高斯曲率代码 加上噪点测试1测试2改进 前言 尝试用一些数据生成有凹凸面的点云。 我们姑且把z轴当成有凹凸的缺陷&#xff0c;x轴和y轴共同组成一个平面。 高斯函数 原理 高斯函数wi…

UE4 C++联网RPC教程笔记(一)(第1~4集)

UE4 C联网RPC教程笔记&#xff08;一&#xff09;&#xff08;第1~4集&#xff09; 前言1. 教程介绍与资源2. 自定义 Debug 功能3. Actor 的复制4. 联网状态判断 前言 本系列笔记将会对梁迪老师的《UE4C联网RPC框架开发吃鸡》教程进行个人的知识点梳理与总结&#xff0c;此课程…

ARMv8-AArch64 的异常处理模型详解之异常处理详解(进入异常以及异常路由)

在上篇文章 ARMv8-AArch64 的异常处理模型详解之异常处理概述Handling exceptions中&#xff0c;作者对异常处理整体流程以及相关概念做了梳理。接下来&#xff0c;本文将详细介绍处理器在获取异常、异常处理以及异常返回等过程中都做了哪些工作。 ARMv8-AArch64 的异常处理模型…

「C++ 内存管理篇 0」C和C++对内存的划分

目录 一、C和C对内存的划分 二、小测试 【题目】 【答案】 【解释】 一、C和C对内存的划分 1. 栈区 &#xff1a;存储非静态局部变量/函数参数/返回值等等&#xff0c;栈是向下增长的。 2. 共享区&#xff1a;用于装载一个共享的动态内存库。用户可使用系统接口创建共享内存…

汽车金融市场研究:预计2029年将达到482亿美元

汽车金融公司作为汽车流通产业链的重要一环&#xff0c;认真贯彻落实国家有关政策&#xff0c;采取多种措施助力汽车产业发展&#xff0c;为促进推动汽车消费、助力畅通汽车产业链、支持稳定宏观经济大盘发挥了积极作用。 益于国内疫情得到有效控制&#xff0c;我国经济持续稳定…

UE5 C++ UENUM 和 USTRUCT

一.首先在APawn里声明 UENUM 和 USTRUCT。UENUM 有两种定义方式 一种是使用命名空间&#xff1a; 还有是继承uint8&#xff1a; 通过申明class类 别名来替代 USTRUCT的定义 上面的第二种有类似但仍然有很多的差异&#xff1a; 首先要有GENERATED_USTRUCT_BODY()这个函数 并且…

网络编程_TCP通信综合练习:

1 //client&#xff1a;&#xff1a; public class Client {public static void main(String[] args) throws IOException {//多次发送数据//创建socket对象,填写服务器的ip以及端口Socket snew Socket("127.0.0.1",10000);//获取输出流OutputStream op s.getOutput…

ChatGPT魔法1: 背后的原理

1. AI的三个阶段 1&#xff09; 上世纪50~60年代&#xff0c;计算机刚刚产生 2&#xff09; Machine learning 3&#xff09; Deep learning&#xff0c; 有神经网络&#xff0c; 最有代表性的是ChatGPT, GPT(Generative Pre-Trained Transformer) 2. 深度神经网络 llya Suts…

Eclipse - Colors and Fonts

Eclipse - Colors and Fonts References 编码最好使用等宽字体&#xff0c;Ubuntu 下自带的 Ubuntu Mono 可以使用。更换字体时看到名字里面带有 Mono 的基本都是等宽字体。 Window -> Preferences -> General -> Appearance -> Colors and Fonts -> C/C ->…