网站显示危险网站要怎么做,设计在线官网中国,百度博客网站模板下载,做定制的网站Python图像灰度变换及图像数组操作 作者#xff1a;MingChaoSun 字体#xff1a;[增加 减小] 类型#xff1a;转载 时间#xff1a;2016-01-27 我要评论 这篇文章主要介绍了Python图像灰度变换及图像数组操作的相关资料,需要的朋友可以参考下使用python以及numpy通过直接操… Python图像灰度变换及图像数组操作 作者MingChaoSun 字体[增加 减小] 类型转载 时间2016-01-27 我要评论 这篇文章主要介绍了Python图像灰度变换及图像数组操作的相关资料,需要的朋友可以参考下 使用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) uint864[ 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) float32110.0 额外的参数‘f将数组的数据类型转为浮点数 由于灰度图没有颜色信息所以形状元组只有两个数值 *array()变换的相反操作可以使用PIL的fromarray()完成如im Image.fromarray(im) 图像数组的简单应用——灰度变换 灰度图像 灰度数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度。 可以通过下面几种方法将图像转换为灰度 1.浮点算法GrayR*0.3G*0.59B*0.11 2.整数方法Gray(R*30G*59B*11)/100 3.移位方法Gray (R*76G*151B*28)8; 4.平均值法GrayRGB/3; 5.仅取绿色GrayG 通过上述任一种方法求得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 2550 255100 2000 255 可以比较明显的看到灰度变换的结果第二张图被反相显示第三张图像的暗部变亮亮部变暗其值被限制在100到200之间其中最后一张图像通过二次函数变换使较暗的像素值变得更暗。 结语 本篇博客介绍了python使用图像数组去进行图像操作的过程包括几个简单的实例通过数组我们可以对图像进行任意数学操作是图像变形、图像分类、图像聚类等的基础希望我的博客对大家有所帮助 转载于:https://www.cnblogs.com/developer-ios/p/7966008.html