利用 Python3 实现图像灰度变换及数组操作

C语言·数组·灰度直方图 C语言·数组·灰度直方图 类别 数组 时间限制 2S 内存限制 1000Kb 问题描述 一幅m×n的灰度图像可以用一个二维矩阵表示,矩阵中的每个元素表示对应像素的灰度值。 灰度直方图表示图像中具有每种灰度级的象素的个数,反映图像中每种灰度出现的频率。 假设图像灰度为16级(灰度值从0-15),现给出一个矩阵表示的灰度图像,输出各级灰度的像素个数。 输入说明 输入数据第一行为两个整数m 和n分别表示图像的宽度和高度(0<=m,n<=256),其后是n行数据,每行m个整数,分别表示图像各个像 阅读详情

使用python以及numpy通过直接操作图像数组完成一系列基本的图像处理

numpy简介:

NumPy是一个非常有名的 Python 科学计算工具包,其中包含了大量有用的工具,比如数组对象(用来表示向量、矩阵、图像等)以及线性代数函数。

数组对象可以实现数组中重要的操作,比如矩阵乘积、转置、解方程系统、向量乘积和归一化。这为图像变形、对变化进行建模、图像分类、图像聚类等提供了基础。

在上一篇python基本图像操作中,当载入图像时,通过调用 array() 方法将图像转换成NumPy的数组对象。NumPy 中的数组对象是多维的,可以用来表示向量、矩阵和图像。通过对图像的数组进行直接操作,就可以完成很多图像处理。

numpy的相关知识网上有很多资料,作为python科学计算的基础,还是非常值得认真学习的。

使用图像数组进行基本图像操作:

认识图像数组:

通过下面这几个程序我们看一下图像与灰度图的图像数组,以及numpy数组的切片。

# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
#读取图片并转为数组
im = array(Image.open("E:/DHU/2.jpg"))
#输出数组的各维度长度以及类型
print(im.shape,im.dtype)
#输出位于坐标100,100,颜色通道为r的像素值
print(im[100,100,0])
#输出坐标100,100的rgb值
print(im[100,100])
print(im.shape,im.dtype)

运行结果:

我们看到的是一个三维数组,分别代表横坐标,纵坐标和颜色通道。

使用的原图为:

我们可以通过数组把红蓝通道交换:

# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
#读取图片并转为数组
im = array(Image.open("E:/DHU/2.jpg"))
#红色通道
r = im[:,:,0]
#交换红蓝通道并显示
im[:,:,0] = im[:,:,2]
im[:,:,2] = r
imshow(im)
show()

这里用到了numpy数组的切片方式。

运行结果:

在转为数组的过程中我们可以设定数据类型,同时灰度图的图像数组也是有意义的:

# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
#读取图片,灰度化,并转为数组
im = array(Image.open("E:/DHU/2.jpg").convert('L'),'f')
#输出数组的各维度长度以及类型
print(im.shape,im.dtype)
#输出坐标100,100(的值
print(im[100,100])

运行结果:

额外的参数‘f'将数组的数据类型转为浮点数

由于灰度图没有颜色信息,所以形状元组只有两个数值

*array()变换的相反操作可以使用PIL的fromarray()完成,如im = Image.fromarray(im)

图像数组的简单应用——灰度变换:

灰度图像:

灰度数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度。

可以通过下面几种方法,将图像转换为灰度:

1.浮点算法:Gray=R*0.3+G*0.59+B*0.11

2.整数方法:Gray=(R*30+G*59+B*11)/100

3.移位方法:Gray =(R*76+G*151+B*28)>>8;

4.平均值法:Gray=(R+G+B)/3;

5.仅取绿色:Gray=G;

通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。

之前已经使用过很多次了,使用python可以通过使用convert(‘L')来获得灰度图

灰度变换:

将图像读入 NumPy 数组对象后,我们可以对它们执行任意数学操作。一个简单的例子就是图像的灰度变换。即任意函数 f ,它将 0…255 区间(或者 0…1 区间)映射到自身。

下面程序中有一些简单的灰度变换:

#-*- coding: utf-8 -*-
from PIL import Image
from pylab import *
#读取图片,灰度化,并转为数组
im = array(Image.open("E:/DHU/2.jpg").convert('L'))
im2 = 255 - im # 对图像进行反相处理
im3 = (100.0/255) * im + 100 # 将图像像素值变换到 100...200 区间
im4 = 255.0 * (im/255.0)**2 # 对图像像素值求平方后得到的图像(二次函数变换,使较暗的像素值变得更小)
#2x2显示结果 使用第一个显示原灰度图
subplot(221)
title('f(x) = x')
gray()
imshow(im)
#2x2显示结果 使用第二个显示反相图
subplot(222)
title('f(x) = 255 - x')
gray()
imshow(im2)
#2x2显示结果 使用第三个显示100-200图
subplot(223)
title('f(x) = (100/255)*x + 100')
gray()
imshow(im3)
#2x2显示结果 使用第四个显示二次函数变换图
subplot(224)
title('f(x) =255 *(x/255)^2')
gray()
imshow(im4)
#输出图中的最大和最小像素值
print(int(im.min()),int(im.max()))
print(int(im2.min()),int(im2.max()))
print(int(im3.min()),int(im3.max()))
print(int(im4.min()),int(im4.max()))
show()

运行结果:

可以比较明显的看到灰度变换的结果,,第二张图被反相显示,第三张图像的暗部变亮,亮部变暗,其值被限制在100到200之间,其中最后一张图像通过二次函数变换使较暗的像素值变得更暗。

python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结 在处理图像的时候经常是读取图片以后把图片转换为灰度图。作为一个刚入坑的小白,我在这篇博客记录了四种处理的方法。首先导入包:import numpy as np import cv2 import tensorflow as tf from PIL import Image方法一:在使用OpenCV读取图片的同时将图片转换为灰度图: img = cv2.imread(imgfile, cv2.... 阅读详情

相关推荐

python 图像处理基本操作

PIL库对图像的基本操作 PIL网上有很多介绍,这里不再讲解。直接操作,读取一张图片,将其转换为灰度图像,并打印出来。

AI_girl的博客 2735

python图像数组操作与灰度变换

Python图像数组操作与灰度变换 使用python以及numpy通过直接操作图像数组完成一系列基本的图像处理 numpy简介: NumPy是一个非常有名的 Python 科学计算工具包,其中包含了大量有用的工具,比如数组对象(用来表示向量、矩阵、图像等)以及线性代数函数。 数组对象可以实现数组中重要的操作,比如矩阵乘积、转置、...

weixin_34208185的博客 2292

3.3 图像灰度变换之伽马变换

在上一章,我们介绍了什么是图像的灰度变换,以及灰度变换中的图像反转。gxyFfxyfxy是位于图像点xy处的像素的值g(x,y)=F(f(x,y))\quad f(x,y)是位于图像点(x,y)处的像素的值gxyFfxy))fxy是位于图像点xy处的像素的值这一章我们来讨论图像的伽马变换(幂律变换)。

专注图形图像处理 1473

python 图形界面读取文件_python实现读取并显示图片方法(不需要图形界面)

在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片。本人偏爱 matpoltlib,因为它的语法更像 matlab。一、matplotlib1. 显示图片2. 显示某个通道3. 将 RGB 转为灰度图matplotlib 中没有合适的函数可以将 RGB 图转换为灰度图,可以根据公式自定义一个:4. 对图像进行放缩这里要用到 scipy5. 保存图...

weixin_39637723的博客 547

python图像对比处理_图像处理 | 灰度变换与图像对比度拉伸

一、问题与解决思路 图像实质上就是一个包含了许多像素点的矩阵。具体计算过程如下:通过min()函数以及max()函数分别求出处理前原图像的灰度级最小值与最大值;对原图像进行归一化处理,即用【图像矩阵元素-处理前灰度级最小值】除以【处理前灰度级最大值-处理前灰度级最小值】;将图像灰度级放缩至我们指定的预期期间,即用【处理后的灰度级最小值】加上“ 【步骤3中归一化处理后的结果】乘以【处理后的灰度级最大...

weixin_42601608的博客 2962

Python 图像处理之灰度化转换:原理、案例与实现

本文深入探讨了彩色图像到灰度图像的转换原理,并提供了使用 Python 和 OpenCV 库实现该转换的示例代码。灰度化图像在图像处理和计算机视觉任务中具有广泛的应用,能够简化图像信息、提高计算效率,以及帮助我们更好地理解和处理图像数据。无论你是图像处理的新手还是经验丰富的开发工程师,都希望本文的内容对你有所帮助,让你能够轻松实现彩色图像到灰度图像的转换,并在实际项目中应用这一技术。

目标检测专栏持续更新中,改进YOLO系列通用,适用v5、v7、v8、所有博客均是团队原创博客,所有文章禁止转载,违者必究。 1759

Python图像灰度变换及图像数组操作

使用python以及numpy通过直接操作图像数组完成一系列基本的图像处理 numpy简介: NumPy是一个非常有名的 Python 科学计算工具包,其中包含了大量有用的工具,比如数组对象(用来表示向量、矩阵、图像等)以及线性代数函数。 数组对象可以实现数组中重要的操作,比如矩阵乘积、转置、解方程系统、向量乘积和归一化。这为图像变形、对变化进行建模、图像分类、图像聚类等提供了基础。 在上一篇python基本图像操作中,当载入图像时,通过调用 array() 方法将图像转换成NumPy的数组对象。N

weixin_36670529的博客 3596

从真题到策略:浙江工业大学计算机转专业机试全解析与备考指南

本文全面解析浙江工业大学计算机转专业机试的考试概况、典型真题和高频考点,提供详细的备考策略和面试准备建议。从机试题目类型到解题技巧,帮助考生高效备考,顺利通过这一竞争激烈的转专业关卡。

weixin_42524824的博客 420

Python图像处理(一)【灰度化、二值化、灰度变换】

11111.灰度化1.1浮点算法1.2.整数算法1.3.平均值法1.4.移位法1.5.单通道法(只取绿色通道)2.二值化2.1.取中间阀值1272.2.取所有像素点灰度的平均值3.灰度变换3.1.反相3.2.将像素值变换到100~200之间3.3.将像素值求平方,使较暗的像素值变得更小3.4.灰度变换函数对比 原图如下 1.灰度化 参考《Python图像灰度变换及图像数组操作》实现以下几种灰...

lzwarhang的博客 5万+

卸载重装Ubuntu22.04双系统

先说一下写此篇文章的背景吧,我在Windows下配置了三个cornerNet深度学习环境分别是cuda10.3(显卡版本太高不支持),cuda11.3(配置后偶然看到一篇说这个版本win下只能用CPU跑),最后是cuda11.1终究还是没能跑通代码,因为它的代码是在Liunx系统写的,就想着装个Ubuntu试试看,在网上看说一般软件不要装太高版本,我就下载了470版的显卡驱动,跟着步骤升级了系统内核,结果第二天开机Ubuntu就崩了,开机黑屏左上角只有一道横杠显示,只能按ctrl+shift+f5进入命令窗

编程小白的博客 8108

clumsy一款模拟弱网的工具

利用封装 Winodws Filtering Platform 的WinDivert 库, clumsy 能实时的将系统接收和发出的网络数据包拦截下来,人工的造成延迟,掉包和篡改操作后再进行发送。无论你是要重现网络异常造成的程序错误,还是评估你的应用程序在不良网络状况下的表现,clumsy 都能让你在不需要额外添加代码的情况下,在系统层次帮你达到想要的效果。

klb5555的专栏 2551

【youcans 的图像处理学习课】6. 灰度变换与直方图处理

本节介绍图像的灰度变化与直方图处理,提供完整例程和运行结果:二值处理,反色变换,线性变换,分段线性变换,对比度拉伸,灰度级分层,非线性变换,直方图处理,直方图均衡化,直方图匹配,局部直方图处理,统计量增强,反向投影。 1. 安装与环境配置 2. 图像读取与显示 3. 图像的创建与修改 4. 图像的叠加与混合 5. 图像的几何变换 6. 灰度变换与直方图处理 7. 空间域图像滤波 8. 频率域图像滤波......

youcans的博客 6774

Unity URP炫彩干涉效果:从薄膜干涉原理到Shader Graph实现

薄膜干涉是一种常见的光学现象,指光在透明薄膜上下表面反射后产生干涉,形成彩虹色条纹。其原理基于光程差导致的相长与相消干涉,不同波长的光被选择性增强或削弱。在计算机图形学中,这一物理现象被抽象为高效的数学模型,通过Shader编程实现动态色彩变化,为游戏和实时渲染带来独特的视觉表现力。技术实现上,常采用正弦函数结合噪声纹理来模拟色彩循环,利用法线与视角点积作为基础变量,加入噪声扰动模拟厚度不均,实现随视角变化的虹彩效果。在Unity URP渲染管线中,可通过Shader Graph可视化工具或手写HLSL代码

weixin_34026997的博客 294

使用python实现图像的简单变换,如灰度变换、直方图均衡化、高斯滤波变换

1. 灰度变换 1.1 原理 当一幅rgb图像每一个点的三个彩色分量的值都相等,即R=G=B。我们就可以用其中一维来表示这个图片,因为三个分量都相等。这一个过程就叫做“灰度化”,灰度化以后得到的图片矩阵会从3维降至2维,这张图片看起来也是黑白的。 1.2 Numpy Numpy是非常有名的Python科学计算工具包,其中包含了大量有用的思想,比如数组对象(用来表示向量、矩阵、图像等)以及线性代数函...

qq_39295665的博客 4930

YOLO12涨点改进| 损失函数改进篇 |AAAI 2025| 一种小目标检测SDLoss损失函数,解决现有损失函数对不同目标尺度敏感度不足的局限,提高了网络检测不同尺度目标的敏感能力,助力高效涨点

本文提出了一种改进的小目标检测方法SDLoss,通过动态调整尺度损失与位置损失的权重,优化了YOLOv12模型的性能。针对红外小目标检测中存在的两个主要问题:1)标准卷积难以捕捉目标的高斯空间分布特性;2)现有损失函数对不同尺度目标的敏感度不足,研究团队开发了Pinwheel-shaped卷积(PConv)和Scale-based Dynamic损失函数(SDLoss)。PConv通过不对称卷积核设计显著提升感受野,SDLoss则根据目标大小动态平衡尺度与位置损失的影响。

Ai缝合怪、助力小伙伴高效发论文 238

零差云控 ZeroErr eRob 电机 CAN、CANopen、EtherCAT、ROS2 机器人开发详细教程

TwinCAT 3(Windows 控制与自动化技术)是 Beckhoff 提供的开发平台,可将任何兼容 PC 转变为实时控制系统,用于管理各种类型的工业自动化系统,如 PLC(可编程逻辑控制器)、运动控制、机器人等。

机器人控制与仿真应用 1万+

Python计算机视觉编程第一章——基本的图像操作和处理

Python计算机视觉编程基本的图像操作和处理(一)PIL:Python 图像处理类库1.1 转换图像格式1.1 创建缩略图1.1 复制和粘贴图像区域1.1 调整尺寸和旋转(二)Matplotlib2.1 绘制图像、点和线2.2 图像轮廓和直方图2.3 交互式标注(三)NumPy3.1 图像数组表示3.2 灰度变换3.3 图像缩放3.4 直方图均衡化3.5 图像平均3.6 图像的主成分分析(PCA...

Dujing2019的博客 3061

一文掌握 MongoDB 详细安装与配置(Windows / Linux / macOS 全平台)

本文详细介绍了MongoDB社区版7.0+在Windows、Linux和macOS三大操作系统上的完整安装、配置与安全加固流程。主要内容包括:各平台推荐安装方式(Windows使用MSI安装包、Linux通过官方仓库、macOS通过Homebrew)、基本配置参数说明、服务启动方法以及关键安全措施(如创建管理员用户和启用身份验证)。文章还提供了系统最低要求、下载地址、数据目录设置建议以及生产环境使用注意事项,适合开发、测试及生产环境部署参考。

数据知道的博客 6712

python图像的数组操作

Python图像数组操作与灰度变换 使用python以及numpy通过直接操作图像数组完成一系列基本的图像处理 numpy简介: NumPy是一个非常有名的Python科学计算工具包,其中包含了大量有用的工具,比如数组对象(用来表示向量、矩阵、图像等)以及线性代数函数。 数组对象可以实现数组中重要的操作,比如矩阵乘积、转置、解方程系统、向量乘积和归一化。这为图像变形、对变化进行建模、图

DATA8866的博客 5506

【MODBUS】Java实现的Modbus协议类库——推荐j2mod库

Jamod是另一个开源的Modbus Java库。这个库的设计是完全面向对象的,基于抽象,应该支持易于理解、可重用性和可扩展性。它支持Modbus RTU和Modbus TCP,并且提供了主站和从站的功能。这是jamod Modbus库的一个分支,取自1.2.1版本,根据Apache 2许可证发布,包含在该项目的SVN存储库中。j2mod项目的目标是基于Java编程语言生成一个功能更全面的Modbus(tm)通信库。这是一个积极开发的项目,接受具有Modbus主站和从站开发经验的专业软件工程师提交的文件。

开源物联网项目商业化作者 5639

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【python 13】计算机视觉:基本的图像处理

PIL(Python Imaging Library,图像处理库)提供了通用的图像处理功能,以及大量有用的基本图像操作。PIL库已经集成在Anaconda库中,推荐使用Anaconda,简单方便,常用库都已经集成。PIL简明教程 其中,test jpg文件夹是作者自己建立的文件夹,存放测试的**.jpg图像,源代码证添加了部分代码以便将获取的图像文件名保存下来,同时将所有的图像转化为.png格式,运行程序后的结果如下:

呆呆的猫的博客 6万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

计算机视觉:基于Numpy的图像处理技术(一):灰度变换、直方图均衡化

python计算机视觉:图像均衡化及灰度处理

AI~天海的博客 3389

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python图像处理较为全面

第 1 章 基本的图像操作和处理本章讲解操作和处理图像的基础知识,将通过大量示例介绍处理图像所需的 Python 工具包,并介绍用于读取图像、图像转换和缩放、计算导数、画图和保存结果等的基本工具。这些工具的使用将贯穿本书的剩余章节。1.1 PIL:Python图像处理类库PIL(Python Imaging Library Python,图像处理类库)提供了通用的图像处理功能,以及大量有用的基本图...

白头码客 4万+
上一篇: Prim算法解析及Java代码实现(附图)
下一篇: 并查集解析及Java代码实现(附图)
SpringRolls
博客等级 码龄9年 73粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值