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

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

相关文章

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

java中反射Reflection的4个作用详解

《java中反射Reflection的4个作用详解》反射Reflection是Java等编程语言中的一个重要特性,它允许程序在运行时进行自我检查和对内部成员(如字段、方法、类等)的操作,本文将详细介绍... 目录作用1、在运行时判断任意一个对象所属的类作用2、在运行时构造任意一个类的对象作用3、在运行时判断

python常用的正则表达式及作用

《python常用的正则表达式及作用》正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持,本文给大家介绍python常用的正则表达式及作用详解,感兴趣的朋友跟随小编一起看看吧... 目录python常用正则表达式及作用基本匹配模式常用正则表达式示例常用量词边界匹配分组和捕获常用re

Java 继承和多态的作用及好处

《Java继承和多态的作用及好处》文章讲解Java继承与多态的概念、语法及应用,继承通过extends复用父类成员,减少冗余;多态实现方法重写与向上转型,提升灵活性与代码复用性,动态绑定降低圈复杂度... 目录1. 继承1.1 什么是继承1.2 继承的作用和好处1.3 继承的语法1.4 子类访问父类里面的成

SpringBoot 中 CommandLineRunner的作用示例详解

《SpringBoot中CommandLineRunner的作用示例详解》SpringBoot提供的一种简单的实现方案就是添加一个model并实现CommandLineRunner接口,实现功能的... 目录1、CommandLineRunnerSpringBoot中CommandLineRunner的作用

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

$在R语言中的作用示例小结

《$在R语言中的作用示例小结》在R语言中,$是一个非常重要的操作符,主要用于访问对象的成员或组件,它的用途非常广泛,不仅限于数据框(dataframe),还可以用于列表(list)、环境(enviro... 目录1. 访问数据框(data frame)中的列2. 访问列表(list)中的元素3. 访问jav