【OpenCV 例程200篇】39. 图像灰度的线性变换

『youcans 的 OpenCV 例程200篇 - 总目录』


【OpenCV 例程200篇】39. 图像灰度的线性变换


线性灰度变换将原始图像灰度值的动态范围按线性关系扩展到指定范围或整个动态范围。

线性灰度变化对图像的每一个像素作线性拉伸,可以凸显图像的细节,提高图像的对比度。

线性灰度变换可以由以下公式描述 :

Dt=d−cb−a[D−a]+c=αD+βDt = \frac{d-c}{b-a}[D-a]+c = \alpha D + \beta Dt=badc[Da]+c=αD+β
式中,D 为原始图像的灰度值,Dt 为线性灰度变换后的图像灰度值。

  • α=1,β=0\alpha = 1,\beta = 0α=1β=0 时,保持原始图像不变
  • α=1,β>0\alpha = 1,\beta > 0α=1β>0 时,图像的灰度值上移,灰度图像颜色发白(彩色图像颜色发亮)
  • α=1,β<0\alpha = 1,\beta < 0α=1β<0 时,图像的灰度值下移,灰度图像颜色发黑(彩色图像颜色发暗)
  • α>1\alpha>1α>1 时,图像的对比度增强
  • 0<α<10 < \alpha < 10<α<1 时,图像的对比度减小
  • α<0,β=255\alpha < 0,\beta=255α<0β=255 时,图像暗区域变亮,亮区域变暗,图像求补
  • α=−1,β=255\alpha = -1,\beta = 255α=1β=255 时,图像的灰度值反转

直方图正规化是根据图像的最小灰度级和最大灰度级,将其拉伸到灰度级全域 [0,255] 的线性变换。


例程:1.49 图像的线性灰度变换

    # 1.49 图像的线性灰度变换img = cv2.imread("../images/imgLena.tif")  # 读取彩色图像(BGR)imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 颜色转换:BGR(OpenCV) -> Grayh, w = img.shape[:2]  # 图片的高度和宽度img1 = np.empty((h, w), np.uint8)  # 创建空白数组img2 = np.empty((h, w), np.uint8)  # 创建空白数组img3 = np.empty((h, w), np.uint8)  # 创建空白数组img4 = np.empty((h, w), np.uint8)  # 创建空白数组img5 = np.empty((h, w), np.uint8)  # 创建空白数组img6 = np.empty((h, w), np.uint8)  # 创建空白数组# Dt[i,j] = alfa*D[i,j] + betaalfa1, beta1 = 1, 50  # alfa=1,beta>0: 灰度值上移alfa2, beta2 = 1, -50  # alfa=1,beta<0: 灰度值下移alfa3, beta3 = 1.5, 0  # alfa>1,beta=0: 对比度增强alfa4, beta4 = 0.75, 0  # 0<alfa<1,beta=0: 对比度减小alfa5, beta5 = -0.5, 0  # alfa<0,beta=0: 暗区域变亮,亮区域变暗alfa6, beta6 = -1, 255  # alfa=-1,beta=255: 灰度值反转for i in range(h):for j in range(w):img1[i][j] = min(255, max((imgGray[i][j]+beta1), 0))  # alfa=1,beta>0: 颜色发白img2[i][j] = min(255, max((imgGray[i][j]+beta2), 0))  # alfa=1,beta<0: 颜色发黑img3[i][j] = min(255, max(alfa3*imgGray[i][j], 0))  # alfa>1,beta=0: 对比度增强img4[i][j] = min(255, max(alfa4*imgGray[i][j], 0))  # 0<alfa<1,beta=0: 对比度减小img5[i][j] = alfa5*imgGray[i][j]+beta5  # alfa<0,beta=255: 暗区域变亮,亮区域变暗img6[i][j] = min(255, max(alfa6*imgGray[i][j]+beta6, 0))  # alfa=-1,beta=255: 灰度值反转plt.figure(figsize=(10, 6))titleList = ["1. imgGray", "2. beta=50", "3. beta=-50", "4. alfa=1.5", "5. alfa=0.75", "6. alfa=-0.5"]imageList = [imgGray, img1, img2, img3, img4, img5]for i in range(6):plt.subplot(2, 3, i + 1), plt.title(titleList[i]), plt.axis('off')plt.imshow(imageList[i], vmin=0, vmax=255, cmap='gray')plt.show()

在这里插入图片描述


(本节完)


版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125112487)
Copyright 2022 youcans, XUPT
Crated:2021-11-18

【第4章:灰度变换与直方图】

37. 图像的灰度化处理和二值化处理
39. 图像灰度的线性变换

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

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

相关文章

网络编程基础

网络协议 TCP/IP协议 IP地址与端口

获取焦点改变状态

表格显示文本内容&#xff0c;当用鼠标点击时获取到焦点文本变为可输入的输入框&#xff0c;点击空白处时失去焦点变为文本显示的文本内容 先看效果图 失去焦点的时候&#xff08;文本内容只能看不能编辑&#xff09; 获取焦点的时候&#xff08;文本内容变为可以编辑的输入框…

【OpenCV 例程300篇】40. 图像分段线性灰度变换

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程300篇】40. 图像分段线性灰度变换 分段线性变换函数可以增强图像各部分的反差&#xff0c;增强感兴趣的灰度区间、抑制不感兴趣的灰度级。 分段线性函数的优点是可以根据需要拉伸特征物的灰度细节&#xff…

Ajax链接输出数据库

使用Ajax链接数据库并且获取数据库里的内容显示在页面 两大步骤&#xff1a; 设计并实现数据库进行数据库链接并获取数据库内容显示 先看效果图 没有查询并显示数据之前效果 点击查询按钮之后获取数据库内容显示在页面 下面进行程序的讲解 一 数据库的设计及实现 新建一…

【OpenCV 例程200篇】41. 图像的灰度变换(灰度级分层)

『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程200篇】41. 图像的灰度变换&#xff08;灰度级分层&#xff09; 线性灰度变换将原始图像灰度值的动态范围按线性关系扩展到指定范围或整个动态范围。 分段线性变换函数可以增强图像各部分的反差&#xff0c;增强感兴趣…

python学习服务器端socket建立

C/S模式简介 Tcp通信模型 Udp通信模型 python标准库中的socket模块 用socket建立TCP服务器端 用socket建立UDP服务器端 socket TCP服务器端测试代码 #coding:utf-8 import socket#Host表示为本机地址 HOST PORT3214#默认为IPV4,TCP协议 ssocket.socket() s.bind((HOST,PORT))s.…

【OpenCV 例程200篇】42. 图像的灰度变换(比特平面分层)

『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程200篇】42. 图像的灰度变换&#xff08;比特平面分层&#xff09; 线性灰度变换将原始图像灰度值的动态范围按线性关系扩展到指定范围或整个动态范围。 分段线性变换函数可以增强图像各部分的反差&#xff0c;增强感兴…

SQLServer奇偶数的输出

编写SQLServer程序分别输出1-100内的奇数和偶数 一 1-100内奇数的输出 执行语句 declare number intset number1while number<101beginif number%21begin print numberendset number1end奇数输出的效果图 二 1-100内偶数的输出 执行语句 declare number intset number1…

python学习socket的客户端实现

服务端见点击打开链接 socket的异常 socket的TCP和UDP客户端模型 TCP的客户端 import socket#ip:127.0.0.1,port 3214 HOST #warning:Ip addr can only be dropped in server! PORT3214#AF_INET IPV4 #SOCK_DGRAM UDP ssocket.socket()#try to receive data from server &…

【OpenCV 例程200篇】43. 图像的灰度变换(对数变换)

『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程200篇】43. 图像的灰度变换&#xff08;对数变换&#xff09; 线性灰度变换将原始图像灰度值的动态范围按线性关系扩展到指定范围或整个动态范围。 对数变换可以由以下公式描述&#xff1a; Dtc∗log(1D)Dt c * log(1…

【OpenCV 例程200篇】45. 图像的灰度直方图(cv2.calcHist)

『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程200篇】45. 图像的灰度直方图 图像直方图是反映图像像素分布的统计表&#xff0c;横坐标代表像素值的取值区间&#xff0c;纵坐标代表每一像素值在图像中的像素总数或者所占的百分比。 灰度直方图是图像灰度级的函数&am…

【OpenCV 例程200篇】44. 图像的灰度变换(伽马变换)

『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程200篇】44. 图像的灰度变换&#xff08;伽马变换&#xff09; 线性灰度变换将原始图像灰度值的动态范围按线性关系扩展到指定范围或整个动态范围。 幂律变换也称伽马变换&#xff0c;可以提升暗部细节&#xff0c;对发…

【OpenCV 例程300篇】46. 直方图处理之直方图均衡化(cv2.equalizeHist)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程300篇】46. 直方图处理之直方图均衡化&#xff08;cv2.equalizeHist&#xff09; 图像直方图是反映图像像素分布的统计表&#xff0c;横坐标代表像素值的取值区间&#xff0c;纵坐标代表每一像素值在图像中的…

【OpenCV 例程300篇】47. 直方图处理之直方图匹配

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程300篇】47. 直方图处理之直方图匹配 图像直方图是反映图像像素分布的统计表。 灰度直方图是图像灰度级的函数&#xff0c;用来描述每个灰度级在图像矩阵中的像素个数。 直方图均衡直接对图像全局进行均衡化…

lingo入门(数据部分)

lingo入门(数据部分) 在数据部分也可以指定一些标量变量&#xff08;scalar variables&#xff09;。当一个标量变量在数据部 分确定时&#xff0c;称之为参数。 data: interest_rate .085; enddata还可以指定几个参数data: interest_rate,inflation_rate .085 .03; enddata如…

我的Go+语言初体验——(1)超详细安装教程

我的Go语言初体验——&#xff08;1&#xff09;超详细安装教程 “我的Go语言初体验” | 征文活动进行中… Go 是什么&#xff1f;为数据而生&#xff0c;实现教学、工程与数据的 “三位一体”。 Go 语言的安装和环境配置有些复杂&#xff0c;官方教程也没有写的很详细。 本文…

JAVA增删查改的实现

java程序对SQLServer数据库的数据进行增删查的操作&#xff0c;结果在控制台输出 步骤详解&#xff1a; 设计并实现数据库在数据库中插入相应的数据链接SQLServer数据库实现对数据库的查增删等功能 数据库内容效果图 下面讲述JAVA代码 目录结构 1 . 数据库链接&#xff…

Mac下配置sublime实现LaTeX

在Mac上通过Sublime、Skim编辑LaTeX Sublime Text是一款非常优秀的编辑器&#xff0c;速度快&#xff0c;界面简洁&#xff0c;插件众多。并且能跨平台使用&#xff0c;在Mac和Windows上都能完美使用。虽然是一款付费软件&#xff0c;但作者很厚道地给了无限期的试用期限。这一…

我的Go+语言初体验——(2)IDE 详细安装教程

我的Go语言初体验——&#xff08;2&#xff09;IDE 详细安装教程 “我的Go语言初体验” | 征文活动进行中… Go 语言的安装和环境配置有些复杂&#xff0c;官方教程也没有写的很详细。 通过控制台编写和运行 Go 程序很不方便。本文从零开始&#xff0c;详细介绍 Go 集成开发环…