网站资料素材怎么做,网站设计网页的优缺点,室内设计联盟下载,成都专业vi设计公司上节我们讲了 Python 的图像处理库 PIL 的基本图像处理功能#xff0c;打开了 PIL 的神秘面纱。这节我们接着讲 PIL 的 Image 模块的常用方法。Image 模块的方法convertImage.convert(modeNone, matrixNone, ditherNone, palette0, colors256)参数说明#xff1a;mode#x… 上节我们讲了 Python 的图像处理库 PIL 的基本图像处理功能打开了 PIL 的神秘面纱。这节我们接着讲 PIL 的 Image 模块的常用方法。Image 模块的方法convertImage.convert(modeNone, matrixNone, ditherNone, palette0, colors256)参数说明mode转换的模式matrix可选转变矩阵。如果给出必须为包含浮点值长为 4 或 12 的元组。dither抖动方法。RGB 转换为 PRGB 或 L 转换为 1 时使用。有 matrix 参数可以无 dither。参数值 NONE 或 FLOYDSTEINBERG(默认)。palette调色板在 RGB 转换为 P 时使用 值为 WEB 或 ADAPTIVE 。colors调色板的颜色值默认 256.转换图片模式它支持每种模式转换为L 、 RGB和 CMYK。有 matrix 参数只能转换为L 或 RGB。当模式之间不能转换时可以先转换 RGB 模式然后在转换。色彩模式转换为 L 模式计算公式 如下L R * 299/1000 G * 587/1000 B * 114/1000我们一般使用时只用传需要转换的 mode 即可其他的可选参数需要先理解图片深层次的原理后才可以理解大家如果感兴趣可以去深入了解一下。下面我们来看一个简单实例from PIL import Imageim Image.open(cat.png)im.show()# 将图像转换成黑白色并返回新图像im1 im.convert(L)im1.show()我们将一个图像转换成 L模式(灰色)转换结果如下图所示copyImage.copy()复制图像方法该方法完全复制一个一模一样的图像很好理解我们就不举例说明了。cropImage.crop(box)参数说明box相对图像左上角坐标为(0,0)的矩形坐标元组, 顺序为(左, 上, 右, 下)该方法从图像中获取 box 矩形区域的图像相当于从图像中抠一个矩形区域出来。我们来看例子from PIL import Imageim Image.open(cat.jpg)print(im.size)im.show()# 定义了图像的坐标位置从左、上、右、下box (100, 100, 250, 250)# 它会从左上角开始同时向下和向右移动100像素的位置开始截取250-100的像素宽高也就是150x150的图像# 这里注意后两个数值要大于前两个数值不然截取后的图像宽高为负数会报错region im.crop(box)print(region.size)region.show()# 输出结果(451, 300)(150, 150)我们从 cat.jpg 这张图片中截取了 150x150 的图像从打印结果可以看到截取前和截取后的图像大小。两张图像的对比如下图filterImage.filter(filter)参数说明filter过滤内核使用给定的筛选器筛选此图像。有关可用筛选器的列表筛选器名称说明BLUR模糊滤波处理之后的图像会整体变得模糊。CONTOUR轮廓滤波将图像中的轮廓信息全部提取出来。DETAIL细节增强滤波会使得图像中细节更加明显。EDGE_ENHANCE边缘增强滤波突出、加强和改善图像中不同灰度区域之间的边界和轮廓的图像增强方法。EDGE_ENHANCE_MORE深度边缘增强滤波会使得图像中边缘部分更加明显。EMBOSS浮雕滤波会使图像呈现出浮雕效果。FIND_EDGES寻找边缘信息的滤波会找出图像中的边缘信息。SHARPEN锐化滤波补偿图像的轮廓增强图像的边缘及灰度跳变的部分使图像变得清晰。SMOOTH平滑滤波突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分使图像亮度平缓渐变减小突变梯度改善图像质量。SMOOTH_MORE深度平滑滤波会使得图像变得更加平滑。看到这些大家是不是联想到我们手机上一些 APP 的图像处理功能了其实那些功能的实现方式跟我们这里讲的方法是一样的。我们来看个例子from PIL import Imagefrom PIL import ImageFilterim Image.open(flower.jpg)im.show()# 模糊im2 im.filter(ImageFilter.BLUR)im2.show()# 轮廓滤波im3 im.filter(ImageFilter.CONTOUR)im3.show()# 细节增强im4 im.filter(ImageFilter.DETAIL)im4.show()我们分别对原图了使用了模糊滤波、轮廓滤波、细节增强滤波的处理大家运行程序就可以看到处理后的效果了如下图所示getbandsImage.getbands()返回一个包含此图像中每个通道名称的元组。直接看实例from PIL import Image# 打开图像im Image.open(cat.jpg)# 创建新图像im1 Image.new(L, (450, 450), 50)# 获取图像的通道名称元组print(im.getbands())print(im1.getbands())# 输出结果(R, G, B)(L,)上例中我们分别打开一个 RGB 图像和创建一个 L 模式的新图像然后打印输出他们的通道名称。getbboxImage.getbbox()计算图像中非零区域的边界框。将边界框作为定义左、上、右和下像素坐标的四元组返回。我们来看例子from PIL import Image# 打开图像(451x300)im Image.open(cat.jpg)# 创建新图像(450x450)im1 Image.new(L, (450, 450), 50)# 打印图像中非零区域的边界框print(im.getbbox())print(im1.getbbox())# 输出结果(0, 0, 451, 300)(0, 0, 450, 450)这个方法很简单很容易理解那么这个方法有什么用处呢最直接的一个用处就是迅速地获取图像的边界坐标。getcolorsImage.getcolors(maxcolors256)参数说明maxcolors最大颜色数。默认限制为256色。获取图像中颜色的使用列表超过 maxcolors 设置值返回 None 。返回值为 (count, pixel) 的列表表示(出现的次数像素的值)from PIL import Imageim Image.open(cat.png)# 将彩色图像转换成灰度图im2 im.convert(L)# 打印灰度图的颜色列表返回的点数超过maxcolors就直接返回Noneprint(im2.getcolors(maxcolors200))print(im2.getcolors(maxcolors255))# 输出结果None[(1, 0), (69, 1), (275, 2), (518, 3), (165, 4), ... (6, 250), (1, 251)]我们这个图像有252个像素值所以第一次 maxcolors 设置为200时由于 252200所以返回了 None。第二次设置255时正常返回。getdataImage.getdata(bandNone)参数band获取对应通道值。如RGB 图像像素值为 (r,g,b) 的元组要返回单个波段请传递索引值(例如0从 RGB 图像中获取 R 波段)。获取图像中每个像素的通道对象元组像素获取从左至右从上至下。getextremaImage.getextrema()获取图像中每个通道的最小值与最大值。对于单波段图像包含最小和最大像素值的2元组。对于多波段图像每个波段包含一个2元组的元组。getpixelImage.getpixel(xy)参数xy坐标以(xy)表示。通过传入坐标返回像素值。如果图像是多层图像则此方法返回元组。pointImage.point(lut, modeNone)参数说明lut一个查找表包含图像中每个波段的256个(或65536个如果 self.mode“I” 和 mode“L”)值。可以改用函数它应采用单个参数。对每个可能的像素值调用一次函数结果表将应用于图像的所有带区。mode输出模式(默认与输入相同)。只有当源图像具有模式 “L” 或 “P” 并且输出具有模式 “1” 或源图像模式为 “I” 并且输出模式为 “L” 时才能使用此选项。对图像的的每个像素点进行操作返回图像的副本。from PIL import Imageim Image.open(cat.png)# 调整灰色图像的对比度im_pointim.convert(L).point(lambda i: i 80 and 255)im_point.show()source im.split()# 三通道分别处理对比度band_r source[0].point(lambda i: i 80 and 255)band_g source[1].point(lambda i: i 80 and 255)band_b source[2].point(lambda i: i 80 and 255)band_r.show()band_g.show()band_b.show()在例子中我们先将图像转换成 L 模式然后调整对比度以及将图像的三个通道分别调整对比度。所谓调整对比度我们这个例子的规则就是当像素值小于80时将其调整为255相当于将接近黑色的像素点加黑使其与浅色对比更明显。运行效果如下图resizeImage.resize(size, resample0, boxNone)参数说明size以像素为单位的请求大小作为2元组(宽度、高度)。resample可选的重新采样滤波器。可以是 PIL.Image.NEAREST(最近滤波) PIL.Image.ANTIALIAS (平滑滤波) PIL.Image.BILINEAR (双线性滤波) PIL.Image.HAMMING PIL.Image.BICUBIC (双立方滤波)。如果省略或者图像具有模式 “1” 或 “P” 则设置为 PIL.Image.NEAREST 。-box一个可选的4元组的浮点数给出了应该缩放的源图像区域。值应在(00宽度高度)矩形内。如果省略或没有则使用整个源。这个方法是获取调整大小后的图片。通俗地讲就是在原图中抠一个矩形区域(如果传入了 box 参数)然后对抠出来的区域进行滤波处理(如果传入了 resample 参数)最后以指定的 size 大小进行返回。from PIL import Imageim Image.open(flower.jpg)img1 im.resize((250, 250), Image.BILINEAR)img2 im.resize((250, 250), Image.BICUBIC)img3 im.resize((250, 250), Image.NEAREST)im.show()img1.show()img2.show()img3.show()这几个滤波器的具体的原理比较理论大家对照着程序运行返回自行去深入了解。关于 PIL 的 Image 模块的方法我们只讲这么多还有好多其他方法大家可参照 https://www.osgeo.cn/pillow/reference/ 这个网站去尝试。我们讲的 PIL 的 Image 模块只是 PIL 的一个基础模块而已它还有好多其他的模块诸如 ImageChops (通道操作模块)、ImageColor (颜色转换模块)、ImageDraw (二维图形模块)等大家在需要的时候可以去查找 API 使用。总结pillow 库是一个非常强大的基础图像处理库若不深入图像处理运用这个库里面的方法组合对图像进行各种常见的操作已经够用这是计算机图片识别的基础。当然如果需要更专业的操作那么就直接上 opencv 吧。参考https://www.osgeo.cn/pillow/reference/文中示例代码https://github.com/JustDoPython/python-100-day/tree/master/day-097系列文章第96天图像库 PIL(一)第95天StringIO BytesIO第94天数据分析之 pandas 初步第93天文件读写第92天Python Matplotlib 进阶操作第91天Python matplotlib introduction从 0 学习 Python 0 - 90 大合集总结PS公号内回复 Python即可进入Python 新手学习交流群一起100天计划-END-Python 技术关于 Python 都在这里