#计算机图形处理1 pilllow应用

参考文档
pillow中文文档
pillow官方

  • 打开图片

区别于opencv的打开方式,Image.open读取的图像PIL格式的,需要转成Numpy及tensor进行使用,图像的通道顺序为RGB;cv2.imread读取的图像直接就是Numpy,图像的通道顺序是BGR,cv2.imshow显示的BGR的图像,如果是RGB图像,需要转成BGR进行显示。

from PIL import Image, ImageFilter
import os
import cv2
import matplotlib.pyplot as plt
print(os.getcwd()) #获取当前工作目录路径
os.chdir('D:\CVPython')
print(os.getcwd()) 
im=Image.open('church.jpg')
print(im.format,im.size,im.mode)
#im.show()
plt.imshow(im)
plt.title("Image Processing@CUC")
plt.axis('off')
plt.show()
  • 改变图片格式
    (将jpg格式的图片转换为png格式,注意文件路径)
from PIL import Image
import os
os.chdir("d:\CVPython")
filelist=os.listdir(os.getcwd()) 
#依次读取文件列表里的文件
for infile in filelist:
    filename=str(infile)
isimg=filename.find('.jpg')#找到文件后缀为.jpg的
    if isimg>=0:
        outfile=infile[0:isimg]+".png"#将后缀修改为png
        if infile!=outfile:
            try:
                Image.open(infile).save(outfile)
            except IOError:
                print("Cannot convert",infile)
#其他图片格式转换方法
from PIL import Image
im = Image.open("3d.jpg")
print(im)
im.save("3d.png")     ## 将"3d.jpg"保存为3d.png"
im = Image.open("3d.png")  ##打开新的png图片
#print(im.format, im.size, im.mode)
  • 图像内部变化的基本操作

【模糊滤镜】

#转成灰度图# 应用模糊滤镜:
im = Image.open('./image/1.jpg').convert("L")
im2 = im.filter(ImageFilter.BLUR)
#模糊(还有其他:BLUR/CONTOUR/DETAIL/EDGE_ENHANCE/EDGE_ENHANCE_MORE/
#(EMBOSS/FIND_EDGES/SMOOTH/SMOOTH_MORE/SHARPEN)
im2.save('blur.jpg', 'jpeg')

【复制粘贴】

#复制粘贴
box=(100,100,200,200)
region=im.crop(box)#复制一块
region=region.transpose(Image.ROTATE_180)#旋转180°
im.paste(region,box)#粘贴

(拓展延伸:与人脸识别相结合进行局部换脸)

image = face_recognition.load_image_file("D:\Python 32\Lib\site-packages\cv2\data\img\old.jpg")
face_locations=face_recognition.face_locations(image)

face_num2=len(face_locations)
print(face_num2)       # The number of faces
org = cv2.imread("D:\Python 32\Lib\site-packages\cv2\data\img\old.jpg")
box={}

for i in range(0,face_num2):
    top = face_locations[i][0]
    right = face_locations[i][1]
    bottom = face_locations[i][2]
    left = face_locations[i][3]
    length = bottom-top
    height = right-left
    box[i] =left, top, left+length, top+height
print(box[0])

pil_im = Image.open('D:\Python 32\Lib\site-packages\cv2\data\img\old.jpg')
region = pil_im.crop(box[1])

pil_im.paste(region, box[0])
#subplot(233)
#title(u'复制粘贴区域', fontproperties=font)
axis('off')
imshow(pil_im)

【旋转翻转】
反转利用Image.FLIP_
旋转利用region.transpose()

Image.FLIP_LEFT_RIGHT #图片左右翻转
Image.FLIP_TOP_BOTTOM #图片上下翻转
region = region.transpose(Image.ROTATE_180)
# region = region.transpose(Image.FLIP_TOP_BOTTOM)
# region = region.transpose(Image.FLIP_LEFT_RIGHT)
# region = region.transpose(Image.ROTATE_90)
#region = region.transpose(Image.ROTATE_270)
#以上方式画布均跟随旋转

【图片轮廓与直方图】

from PIL import Image
from pylab import *

im=array(Image.open('1.jpg').convert('L'))
#图片1
figure()
gray()
contour(im,origin='image')
#直方图
axis('equal')
#与原图片同等大小
axis('off')
#图片2
figure()
hist(im.flatten(),128)#图像轮廓
show()
from PIL import Image  
from PIL import ImageEnhance  

#原始图像  
image = Image.open('lena.jpg')  
image.show()  

#亮度增强  
enh_bri = ImageEnhance.Brightness(image)  
brightness = 1.5  
image_brightened = enh_bri.enhance(brightness)  
image_brightened.show()  

#色度增强  
enh_col = ImageEnhance.Color(image)  
color = 1.5  
image_colored = enh_col.enhance(color)  
image_colored.show()  

#对比度增强  
enh_con = ImageEnhance.Contrast(image)  
contrast = 1.5  
image_contrasted = enh_con.enhance(contrast)  
image_contrasted.show()  

#锐度增强  
enh_sha = ImageEnhance.Sharpness(image)  
sharpness = 3.0  
image_sharped = enh_sha.enhance(sharpness)  
image_sharped.show()

【拉伸、分割、填充、混合】


#拉伸
#im=array(Image.open('1.jpg').convert('L'))
im=Image.open('1.jpg')
print(im.size)
x,y=im.size
img=im.resize((x,y*2))
img.show()


#为png填充颜色背景
im1 = Image.open('gs.png')
x1,y1 = im1.size
print(im1.size)

try:
  # 使用白色来填充背景
  # (alpha band as paste mask).
  p = Image.new('RGBA', im1.size, (255,0,255))
  p.paste(im1, (0, 0, x1, y1), im1)
  p.save('pic_out.png')
except:
  pass


#切分九宫格
filename = r'1.jpg'
img = Image.open(filename)
size = img.sizeprint(size)
# 准备将图片切割成9张小图片
weight = int(size[0] // 3)
height = int(size[1] // 3)# 切割后的小图的宽度和高度print(weight, height)
for j in range(3):
    for i in range(3):
        box = (weight * i, height * j, weight * (i + 1), height * (j + 1))
        region = img.crop(box)
        region.save('{}{}.png'.format(j, i))
#混合
background = Image.open('b.jpg')
w,h=background.size
img = Image.open('1.png')
img = img.resize((w, h), Image.ANTIALIAS)#大小需要相同

background = background.convert('RGBA') # 两个图片的格式需要相同
img = Image.blend(background, img, 0.7)
img.save('out_.png')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值