图像灰度变换及图像数组操作
Python图像灰度变换及图像数组操作
作者:MingChaoSun 字体:[增加 减小] 类型:转载 时间:2016-01-27 我要评论
使用python以及numpy通过直接操作图像数组完成一系列基本的图像处理
numpy简介:
NumPy是一个非常有名的 Python 科学计算工具包,其中包含了大量有用的工具,比如数组对象(用来表示向量、矩阵、图像等)以及线性代数函数。
数组对象可以实现数组中重要的操作,比如矩阵乘积、转置、解方程系统、向量乘积和归一化。这为图像变形、对变化进行建模、图像分类、图像聚类等提供了基础。
在上一篇python基本图像操作中,当载入图像时,通过调用 array() 方法将图像转换成NumPy的数组对象。NumPy 中的数组对象是多维的,可以用来表示向量、矩阵和图像。通过对图像的数组进行直接操作,就可以完成很多图像处理。
numpy的相关知识网上有很多资料,作为python科学计算的基础,还是非常值得认真学习的。
使用图像数组进行基本图像操作:
认识图像数组:
通过下面这几个程序我们看一下图像与灰度图的图像数组,以及numpy数组的切片。
1
2
3
4
5
6
7
8
9
10
11
12
|
# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
#读取图片并转为数组
im = array(Image. open ( "./source/test.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
|
运行结果:
(600, 500, 3) uint8
64
[ 64 117 195]
我们看到的是一个三维数组,分别代表横坐标,纵坐标和颜色通道。
我们可以通过数组把红蓝通道交换
1
2
3
4
5
6
7
8
9
10
11
12
|
# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
#读取图片并转为数组
im = array(Image. open ( "./source/test.jpg" ))
#红色通道
r = im[:,:, 0 ]
#交换红蓝通道并显示
im[:,:, 0 ] = im[:,:, 2 ]
im[:,:, 2 ] = r
imshow(im)
show()
|
这里用到了numpy数组的切片方式,关于numpy的资料网上有很多,就不过多叙述了。
运行结果:
在转为数组的过程中我们可以设定数据类型,同时灰度图的图像数组也是有意义的:
1
2
3
4
5
6
7
8
9
|
# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
#读取图片,灰度化,并转为数组
im = array(Image. open ( "./source/test.jpg" ).convert( 'L' ), 'f' )
#输出数组的各维度长度以及类型
print im.shape,im.dtype
#输出坐标100,100的值
print im[ 100 , 100 ]
|
运行结果:
(600, 500) float32
110.0
额外的参数‘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 区间)映射到自身。
下面程序中有一些简单的灰度变换:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#-*- coding: utf-8 -*-
from PIL import Image
from pylab import *
#读取图片,灰度化,并转为数组
im = array(Image. open ( "./source/test.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()
|
运行结果:
0 255
0 255
100 200
0 255
可以比较明显的看到灰度变换的结果,,第二张图被反相显示,第三张图像的暗部变亮,亮部变暗,其值被限制在100到200之间,其中最后一张图像通过二次函数变换使较暗的像素值变得更暗。
结语:
本篇博客介绍了python使用图像数组去进行图像操作的过程,包括几个简单的实例,通过数组我们可以对图像进行任意数学操作,是图像变形、图像分类、图像聚类等的基础,希望我的博客对大家有所帮助~
转载于:https://www.cnblogs.com/developer-ios/p/7966008.html
图像灰度变换及图像数组操作相关推荐
- MATLAB图形图像处理——图像灰度变换
MATLAB图形图像处理--图像灰度变换 一.MATLAB入门知识 1.什么是MATLAB 2.MATLAB处理图像 图像数据 数据类型 位深 函数 imread imwrite 二.图像灰度变换基础 ...
- python的所有基本函数图像_基本图像操作和处理(python)
PIL提供了通用的图像处理功能,以及大量的基本图像操作,如图像缩放.裁剪.旋转.颜色转换等. Matplotlib提供了强大的绘图功能,其下的pylab/pyplot接口包含很多方便用户创建图像的函数 ...
- OpenCV 【十九】图像金字塔/基本的阈值操作/实现自己的线性滤波器
目录 1.part one 图像金字塔 1.1原理 1.1.1图像金字塔 1.1.2高斯金字塔 1.2代码 1.3运行结果 2.part two 基本的阈值操作¶ 2.1原理 2.1.1阈值化的类型: ...
- OpenCV 1.x 2.x 编程简介(矩阵/图像/视频的基本读写操作)
OpenCV 编程简介(矩阵/图像/视频的基本读写操作) Introduction to programming with OpenCV OpenCV编程简介 作者: Gady Agam Depart ...
- 【Android RTMP】x264 图像数据编码 ( Camera 图像数据采集 | NV21 图像数据传到 Native 处理 | JNI 传输字节数组 | 局部引用变量处理 | 线程互斥 )
文章目录 安卓直播推流专栏博客总结 一. NV21 数据传入 Native 层 二. jbyte * 数据类型 ( Java 中的 byte[] 数组传入 JNI 处理方式 ) 三. 局部引用处理 四 ...
- OpenCV之imgproc 模块. 图像处理(1)图像平滑处理 腐蚀与膨胀(Eroding and Dilating) 更多形态学变换 图像金字塔 基本的阈值操作
图像平滑处理 目标 本教程教您怎样使用各种线性滤波器对图像进行平滑处理,相关OpenCV函数如下: blur GaussianBlur medianBlur bilateralFilter 原理 No ...
- 34.35.热图(heatmap)、创建带注释的热图、使用辅助函数的代码样式、图像显示、图像插值、将图像数据导入Numpy数组、将numpy数组绘制为图像
34.热图(heatmap) 34.1.创建带注释的热图 34.2.使用辅助函数的代码样式 35.图像显示 35.1.图像插值 35.2.将图像数据导入Numpy数组 35.3.将numpy数组绘制为 ...
- opencv批量灰度转换_OpenCV图像处理之常见的图像灰度变换
1.灰度线性变换 图像的灰度线性变换是图像灰度变换的一种,图像的灰度变换通过建立灰度映射来调整源图像的灰度,从而达到图像增强的目的.灰度映射通常是用灰度变换曲线来进行表示.通常来说,它是将图像的像素值 ...
- 空域图像增强-图像灰度变换
1.图像灰度变换.自选一张图片,完成以下图像处理:①显示图像的灰度直方图:②直方图均衡化,对比变化前后的图像和灰度直方图:③对图像进行线性灰度变换,对某部分灰度值进行扩展,压缩其它灰度值区域,对比变化 ...
最新文章
- Android进程间通信(IPC)机制Binder简要介绍和学习计划
- 扩展中国剩余定理 exCRT 学习笔记
- Python+tensorflow计算整数阶乘的方法与局限性
- Python机器学习 使用sklearn构建决策树复习
- DTC标准故障码格式解析
- spark机器学习 源码解析及原理分析
- CloudMounter——将大容量网盘服务巧妙地挂载到系统文件管理器中
- python3 英文字母大小写的转变
- 服务器字体显示繁体字怎么解决,win7繁体字乱码怎么办?win7繁体字显示乱码解决方法...
- python提取图片中的文字自动填表_python写一个自动识别图片提取文字
- 7939.com,7b.com.cn,9505.com,4199.com 清除工具(转)
- xilinx 高速收发器Serdes深入研究 GTX-3(时钟纠正clock correction)
- 神经网络算法入门实例,神经网络算法入门书籍
- 云计算机专用显示器,电视秒变电脑显示器客厅云电脑操作方法
- 【广州数据报表中心怎么样】什么样的大数据
- C语言安卓FTP服务器,FTP服务器客户端源代码C语言
- 15 路由器综合路由配置
- 三百个好用的免费软件名单[转]
- 小梅哥FPGA学习笔记
- CnPeng杂说:油条的来历
热门文章
- js html 导出word 不用activexobject,javascript下用ActiveXObject控件替换word书签,将内容导出到word后打印第2/2页...
- linux系统md5sum命令用不了,Linux中md5sum命令起什么作用呢?
- c#精彩编程200例百度云_永安市教育局被授予“人工智能编程教育试验区”
- html5与css3都要学吗,前端要学css3吗?
- Linux存储保护,谈谈Linux中的存储保护
- cdrom是多媒体微型计算机,全国计算机二级题库第三章
- python代码模板_python 代码模板
- C语言代码规范(十)花里胡哨代码鉴赏
- go返回多个值和python返回多个值对比
- android自动化持续集成,基于持续集成的Android自动化测试.pdf