数字图像处理 | 对比度在图像中起到什么作用

2023-11-23 20:30

本文主要是介绍数字图像处理 | 对比度在图像中起到什么作用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

你真的了解对比度吗?对比度是数字图像中非常基本的概念,一幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,即指一幅图像灰度反差的大小。直白的说就是:对比度大整体的色彩更鲜艳,对比度小色彩感更平淡。接下来我们用像素直方图的例子来形象的展示对比度大小在图像上的差异。

1.整体实现代码
from PIL import Image
from PIL import ImageEnhance
import matplotlib.pyplot as plt
import numpy as npdef get_piexl_list(img):w, h = img.size[0], img.size[1]img_list = img.load()r_list = []g_list = []b_list = []for i_w in range(w):for j_h in range(h):r, g, b = img_list[i_w, j_h]r_list.append(r)g_list.append(g)b_list.append(b)r_list = np.asarray(r_list)g_list = np.asarray(g_list)b_list = np.asarray(b_list)return r_list,g_list,b_listdef draw_mulit_pic(r_list,g_list,b_list):fig, ax = plt.subplots()ax = fig.add_subplot(311)ax2 = fig.add_subplot(312)ax3 = fig.add_subplot(313)ax.hist(r_list, bins=256, normed=True, color='yellow')ax2.hist(g_list, bins=256, normed=True, color='red')ax3.hist(b_list, bins=256, normed=True, color='blue')plt.show()def enhance_contrast(img):enh_con = ImageEnhance.Contrast(img)contrast = 1.5img_contrasted = enh_con.enhance(contrast)img_contrasted.show()return img_contrastedif __name__ == "__main__":img = Image.open('D:\\1.jpeg')# 原始图像直方图r_list,g_list,b_list = get_piexl_list(img)draw_mulit_pic(r_list, g_list, b_list)# 对比度增强img_contrasted = enhance_contrast(img)# 对比度增强后图像直方图r_list,g_list,b_list = get_piexl_list(img_contrasted)draw_mulit_pic(r_list, g_list, b_list)
2.原始图像直方图
    img = Image.open('D:\\1.jpeg')# 原始图像直方图r_list,g_list,b_list = get_piexl_list(img)draw_mulit_pic(r_list, g_list, b_list)

利用上述代码画出原始图像的像素直方图,从下图的直方图中可以观察到,直方图差异比较大,起伏比较大。
原始图像直方图

3.增强后图像直方图
    # 对比度增强img_contrasted = enhance_contrast(img)# 对比度增强后图像直方图r_list,g_list,b_list = get_piexl_list(img_contrasted)draw_mulit_pic(r_list, g_list, b_list)

利用PIL库自带的对比度增强策略对图像进行增强,并重新将直方图画出来,从增强后的直方图可以看到,整体的像素分布会比较均匀。
对比度增强后直方图

4.对比度增强结果显示

我乔神和奥胖仿佛做了美黑!

这篇关于数字图像处理 | 对比度在图像中起到什么作用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/420541

相关文章

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

css中的 vertical-align与line-height作用详解

《css中的vertical-align与line-height作用详解》:本文主要介绍了CSS中的`vertical-align`和`line-height`属性,包括它们的作用、适用元素、属性值、常见使用场景、常见问题及解决方案,详细内容请阅读本文,希望能对你有所帮助... 目录vertical-ali

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock