Python 图片处理模块之PIL

https://blog.csdn.net/zhangziju/article/details/79123275     转载地址:

#从文本库中加载图片
from PIL import Image
##如果变量mode被设置,那必须是“r”。用户可以使用一个字符串(表示文件名称的字符串)或者文件对象作为变量file的值。文件对象必须实现read(),seek()和tell()方法,并且以二进制模式打开。
#open类
img=Image.open(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈1.jpg')
#Save类,可以进行图片格式转换,jpg转png
img.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈1.png')
#打印图片的大小,打印图片的模式,打印图片的格式
print(img.size,img.mode,img.format)
#format类,可以打印图片的格式
print(img.format)
#Mode类
'''
modes  描述
1  1位像素,黑和白,存成8位的像素
L  8位像素,黑白
P  8位像素,使用调色板映射到任何其他模式
RGB    3× 8位像素,真彩
RGBA   4×8位像素,真彩+透明通道
CMYK   4×8位像素,颜色隔离
YCbCr  3×8位像素,彩色视频格式
I  32位整型像素
F  32位浮点型像素
'''
#convert类,将当前图片转换为其他模式,并且返回新的图像
new_im=img.convert('P')
print('图片的模式为:',new_im)
#size类,获取图片的尺寸
print('图片的尺寸为:',img.size)
#palette类,颜色调色板表格,如果图像的模式是"P",则返回ImagePalette类的实例;否则,将返回None
print(new_im.palette)
#info类,存储图像相关数据的字典。文件句柄使用该字典传递从文件中读取的各种非图像信息。
print(img.info)  #jfif为JPEG文件交换格式
#new类,
'''
使用给定的变量mode和size生成新的图像。
Size是给定的宽/高二元组,这是按照像素数来计算的。
对于单通道图像,变量color只给定一个值;
对于多通道图像,变量color给定一个元组(每个通道对应一个值)
。在版本1.1.4及其之后,用户也可以用颜色的名称,比如给变量color赋值为“red”。
如果没有对变量color赋值,图像内容将会被全部赋值为0(为黑色)。
如果变量color是空,图像将不会被初始化,即图像的内容全为0。
这对向该图像复制或绘制某些内容是有用的。
'''
n_im=Image.new("RGB",(128,128), "#FF0000")#指定模式,尺寸,颜色
#Copy类,拷贝这个图像。如果用户想粘贴一些数据到这张图,可以使用这个方法,但是原始图像不会受到影响。
cp_im=n_im.copy()
#Crop类
box = (300, 100, 700, 700)
region=img.crop(box)

#Paste类,将一张图粘贴到另一张图像上。变量box或者是一个给定左上角的2元组,或者是定义了左,上,右和下像素坐标的4元组,或者为空(与(0,0)一样)。如果给定4元组,被粘贴的图像的尺寸必须与区域尺寸一样。如果模式不匹配,被粘贴的图像将被转换为当前图像的模式。
img.paste(region, (100,100))             ##(100,100,0,0)
#img.paste(region, (400,400,500,500))
#img.show()

#Filter类,返回一个使用给定滤波器处理过的图像的拷贝。具体参考图像滤波在ImageFilter 模块的应用,在该模块中,预先定义了很多增强滤波器,可以通过filter( )函数使用,预定义滤波器包括:BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。其中BLUR就是均值滤波,CONTOUR找轮廓,FIND_EDGES边缘检测

from PIL import Image
from PIL import ImageFilter
import sys
sys.stdout.flush()
img=Image.open(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈1.jpg')
#img.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈1.png')
#模糊滤波,处理之后的图像会整体变得模糊
bluF=img.filter(ImageFilter.BLUR)
bluF.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈2.png')
#CONTOUR为轮廓滤波,将图像中的轮廓信息全部提取出来
conF=img.filter(ImageFilter.CONTOUR)
conF.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈3.png')
#DETAIL为细节增强滤波,会使得图像中细节更加明显
detF=img.filter(ImageFilter.DETAIL)
detF.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈4.png')
#EDGE_ENHANCE为边缘增强滤波,突出、加强和改善图像中不同灰度区域之间的边界和轮廓的图像增强方法。经处理使得边界和边缘在图像上表现为图像灰度的突变,用以提高人眼识别能力。
edgF=img.filter(ImageFilter.EDGE_ENHANCE)
edgF.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈5.png')
#EDGE_ENHANCE_MORE为深度边缘增强滤波,会使得图像中边缘部分更加明显
edgeF=img.filter(ImageFilter.EDGE_ENHANCE_MORE)
edgeF.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈6.png')
#EMBOSS为浮雕滤波,会使图像呈现出浮雕效果
emboF=img.filter(ImageFilter.EMBOSS)
emboF.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈7.png')
#FIND_EDGES为寻找边缘信息的滤波,会找出图像中的边缘信息
findF=img.filter(ImageFilter.FIND_EDGES)
findF.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈8.png')
#SMOOTH为平滑滤波,突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分,使图像亮度平缓渐变,减小突变梯度,改善图像质量。
smoF=img.filter(ImageFilter.SMOOTH)
smoF.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈9.png')
#SMOOTH_MORE为深度平滑滤波,会使得图像变得更加平滑
smooF=img.filter(ImageFilter.SMOOTH_MORE)
smooF.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈10.png')
#SHARPEN为锐化滤波,补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰
shaF=img.filter(ImageFilter.SHARPEN)
shaF.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈11.png')
#Kernel 生成一个给定尺寸的卷积核,变量kernel与变量size对应地必须为包含9个或者25个整数或者浮点数的序列
#如果设置了变量scale,那将卷积核作用于每个像素值之后的数据,都需要除以这个变量。默认值为卷积核的权重之和
#如果设置变量offset,这个值将加到卷积核作用的结果上,然后再除以变量scale。
#im=img.filter(ImageFilter.kernel((3,3),(1,1,1,0,0,0,2,0,2)))
#RankFilter 生成给定尺寸的等级滤波器。对于输入图像的每个像素点,等级滤波器根据像素值,在(size,size)的区域中对所有像素点进行排序,然后拷贝对应等级的值存储到输出图像中。
ranF=img.filter(ImageFilter.RankFilter(5,24))
ranF.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈12.png')
#MinFilter 生成给定尺寸的最小滤波器。对于输入图像的每个像素点,该滤波器从(size,size)的区域中拷贝最小的像素值存储到输出图像中
minF=img.filter(ImageFilter.MinFilter)
minF.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈13.png')
#MedianFilter 生成给定尺寸的中值滤波器。对于输入图像的每个像素点,该滤波器从(size,size)的区域中拷贝中值对应的像素值存储到输出图像中
medF=img.filter(ImageFilter.MedianFilter)
medF.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈14.png')
#MaxFilter 生成给定尺寸的最大滤波器。对于输入图像的每个像素点,该滤波器从(size,size)的区域中拷贝最大的像素值存储到输出图像中。
maxF=img.filter(ImageFilter.MaxFilter)
maxF.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈15.png')
#ModeFilter 生成给定尺寸的模式滤波器。对于输入图像的每个像素点,该滤波器从(size,size)的区域中拷贝出现次数最多的像素值存储到输出图像中。如果没有一个像素值出现过两次极其以上,则使用原始像素值
modF=img.filter(ImageFilter.ModeFilter)
modF.save(r'C:\Users\Administrator\Desktop\106\data\textdata\哈哈16.png')
展开阅读全文

没有更多推荐了,返回首页