图像处理
图像的RGB色彩模式
R 红色 取值范围,0-255
G 绿色 取值范围 0-255
B 蓝色 取值范围 0-255
比如我们常见的黄色就是由红色和绿色叠加而来
红色的RGB表示(255,0,0) 绿色的RGB表示(0,255,0)
蓝色的RGB表示(0,0,255) 黄色的RGB表示(255,255,0)
像素阵列
数字图像可以看成一个整数阵列,阵列中的元素称为像素
Image模块
打开和新建
open(f,mode)
f:指打开文件的路径
mode:可选参数,表示打开文件的方式,通常使用默认值r
完全支持的格式
BMP, DIB, EPS, GIF, ICNS, ICO, IM, JPEG, JPEG 2000, MSP, PCX, PNG, PPM, SGI, SPIDER, TGA, TIFF, WEBP, XBM只读格式
BLP, CUR, DCX, DDS, FLC, FPX, FTEX, GBR, GD, IMT, IPTC/NAA, MCIDAS, MIC, MPO, PCD, PIXAR, PSD, WAL, XPM只写格式
PALM,PDF,XV缩略图只标识格式
BUFR, FITS, GRIB, HDF5, MPEG, WMF
from PIL import Image
img = Image.open('校园.jpg')
# img.show() 显示图片
print('图片格式:', img.format)
print('图片的大小:', img.size)
print('图片的高度:', img.height, '图片的宽度:', img.width)
print('获取(100,100)处像素值:', img.getpixel((100,100)))
遮罩混合
from PIL import Image
img1 = Image.open('12栋.jpg')
img2 = Image.open('校园.jpg')
img1 = img1.resize(img2.size)
r, g, b = img1.split()
Image.composite(img1, img2, b).show()
透明度混合
from PIL import Image
img1 = Image.open('12栋.jpg').convert(mode='RGB')
img2 = Image.new('RGB',img1.size,'red')
Image.blend(img1,img2,alpha=0.5),show()
复制和缩放
from PIL import Image
img1 = Image.open('12栋.jpg')
img1.show()
Image.eval(img1, lambda x: x*2).show() # 像素扩大两倍
# 复制图片
img2 = img1.copy()
print(img2.size)
img1.show()
img2.thumbnail((200, 100))
img2.show()
图像的裁剪和粘贴
from PIL import Image
img = Image.open('校园.jpg')
imgb = img.copy()
imgc = img.copy()
img_crop = imgb.crop((10,10,120,120))
imgc.paste(img_crop,(30,30))
img.show()
图像旋转
from PIL import Image
img = Image.open('b.png')
# 图像的旋转
img.rotate(180).show() # 图像旋转180
# 格式转换
img.transpose(Image.FLIP_TOP_BOTTOM).show() #上下滤镜
img.transpose(Image.FLIP_LEFT_RIGHT).show() #左右滤镜
img.transpose(Image.ROTATE_90).show() #90滤镜
img.transpose(Image.ROTATE_180).show() #180滤镜
img.transpose(Image.TRANSPOSE).show() #颠倒滤镜
分离和合并
from PIL import Image
img1 = Image.open('a.png')
img2 = Image.open('b.png')
img2 = img2.resize(img1.size)
# 分隔
r1,g1,b1 = img1.split()
r2,g2,b2 = img2.split()
temp = [r1,g2,b1]
img = Imge.merge('RGB',temp)
img.show()
滤镜
from PIL import Image,ImgeFilter
img = Imge.open('b.jpg')
# 创建一个图像
img_output = Image.new('RGB',(2*w,h))
img_output.paste(img,(0,0))
img_filter = img.filter(ImgeFilter,(w,0))
img_output.show()
from PIL import Image,ImgeFilter
img = Imge.open('b.jpg')
# 创建一个图像
img_output = Image.new('RGB',(2*w,h))
img_output.paste(img,(0,0))
img_filter1 = img.filter(ImgeFilter.GaussianBlur) # 高斯滤镜
img_filter2 = img.filter(ImgeFilter.EDGE_ENHANCE) # 边缘增强滤镜
img_filter3 = img.filter(ImgeFilter.FEND_EDGES) # 寻找边缘滤镜
filters.append(img_filter1)
filters.append(img_filter2)
filters.append(img_filter3)
for img_filter in filters:
img.output.paste(img_filter,(w,0))
img_output.show()
图像合成
from PIL import Image,ImgeFilter
img1 = Imge.open('a.jpg')
img2 = Imge.open('b.jpg')
# 对两张图片进行算术加法运算
# ImgeChops.add(img1,img2).show()
# 对两张图片进行算术减法
# ImageChops.subtrac(img1,img2).show()
# 使用darker()函数
# ImageChops.darker(img1,img2).show()
# 使用变亮函数lighter()函数
# ImageChops.lighter(img1,img2).show()
# 两张图片互相叠加multiply
# ImageChops.multiply(img1,img2).show()
# screen()
# ImagesChops.screen(img1,img2).show()
#反色invert()
# ImagesChops.invert(img1,img2).show()
# 比较函数difference()
# ImagesChops.difference(img1,img2).show()