学习python 第十五天

python
图像处理

计算机中,将红、绿、蓝三种色光以不同的比例叠加来组合成其他的颜色,这三种颜色就是色光三原色,所以我们通常会将一个颜色表示为一个RGB值或RGBA值(R表示红色G表示绿色B表示蓝色,其中的A表示Alpha通道,它决定了透过这个图像的像素,也就是透明度)。

Red (255, 0, 0, 255)
Green (0, 255, 0, 255)
Blue (0, 0, 255, 255)

像素,对于一个由数字序列表示的图像来说,最小的单位就是图像上单一颜色的小方格,这些小方块都有一个明确的位置和被分配的色彩数值,而这些一小方格的颜色和位置决定了该图像最终呈现出来的样子,它们是不可分割的单位,我们通常称之为像素(pixel)。每一个图像都包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。

python 用Pillow操作图像

pip install pillow

Pillow中最为重要的是Image类,读取和处理图像都要通过这个类来完成。
缩略 thumbnail(宽,高)

from PIL import Image

# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('./test.jpg')
# 获得图像尺寸:    .size
w, h = im.size  
print('Original image size: %sx%s' % (w, h))
# 缩放到50%:  #thumbnail 缩略图
im.thumbnail((w//2, h//2))   #" / "就表示 浮点数除法,返回浮点结果;" // "表示整数除法。
print('Resize image to: %sx%s' % (w//2, h//2))  
# 把缩放后的图像用jpeg格式保存:  可以命名为新名
im.save('new.jpg', 'jpeg')

剪裁 crop([左,上,右,下 ])

from PIL import Image
 image = Image.open('./user/test.jpg')
 rect = [80, 80, 80, 60] 
 image.crop(rect).show() #.crop([img.size[0]/4,img.size[1]/4,img.size[0]*3/4,img.size[1]*3/4])   (left, upper, right, lower),Python Imaging Library 使用左上角为 (0, 0)的坐标系统

缩放和黏贴图像

image1 = Image.open(’./res/1.png’)
image2 = Image.open(’./res/2.jpg’)
rect = 80, 20, 310, 360
crop_image = image2.crop(rect)
width, height = crop_image .size
image1.paste(crop_image .resize((int(width / 1.5), int(height / 1.5))), (172, 40))

#crop函数带的参数为(起始点的横坐标,起始点的纵坐标,宽度,高度)
#paste函数的参数为(需要修改的图片,粘贴的起始点的横坐标,粘贴的起始点的纵坐标)

旋转和翻转

 from PIL import Image
 image = Image.open('./user/test.png')
 im_image = image.rotate(180)  #逆时针旋转
 im_image.show()
 
out = image .transpose(Image.FLIP_LEFT_RIGHT)  #左右翻转
out = image .transpose(Image.FLIP_TOP_BOTTOM) #上下翻转
out = image .transpose(Image.ROTATE_90) #逆时针90度
out = image .transpose(Image.ROTATE_180) #逆时针180度
out = image .transpose(Image.ROTATE_270) #您是真270度

#out.show()

操作像素

#左上为坐标原点(0,0)  X轴是从左到右增长的,而Y轴是从上到下增长。

    image = Image.open('./user/test.jpg')
          for x in range(10, 100):
    	.     for y in range(20, 360):
            image.putpixel((x, y), (255, 0, 0)) 
    image.show()
    #putpixel(元组做参数,rgb)  (x,y)像素的颜色被覆盖

滤镜效果

from PIL import Image, ImageFilter
image = Image.open('./user/test.jpg')
out = image.filter(ImageFilter.CONTOUR)
out.show()

ImageFilter类中预定义了如下滤波方法 列举常用的
• BLUR:模糊滤波
• CONTOUR:轮廓滤波
• DETAIL:细节滤波
• EDGE_ENHANCE:边界增强滤波
• EDGE_ENHANCE_MORE:边界增强滤波(程度更深)
• EMBOSS:浮雕滤波
• FIND_EDGES:寻找边界滤波
• SMOOTH:平滑滤波
• SMOOTH_MORE:平滑滤波(程度更深)
• SHARPEN:锐化滤波

验证码

PIL的ImageDraw生成字母验证码图片:

from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random  #生成随机数需要

# 随机字母:
def rndChar():
    return chr(random.randint(65, 90))    
    #chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
	#random.randint(a,b)用于生成一个指定范围内的整数。生成的随机数n: a <= n <= b

# 随机颜色1:
def rndColor():
    return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))

# 随机颜色2:
def rndColor2():
    return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))

# 320 x 60:
width = 80 * 4   #有4个字母
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))  #给定模式(mode)和尺寸(size),RGB
# 创建Font对象:
font = ImageFont.truetype('./arial.ttf', 36)   #设置字体 及大小
# 创建Draw对象:
draw = ImageDraw.Draw(image)  #创建一个可以在给定图像上绘图的对象。
# 填充每个像素:
for x in range(width):
    for y in range(height):
        draw.point((x, y), fill=rndColor())  #point(绘图区,颜色)
# 输出文字:
for t in range(4):
    draw.text((80 * t + 10, 10), rndChar(), font=font, fill=rndColor2()) #text((x,y),颜色)
# 模糊:
image = image.filter(ImageFilter.BLUR)  #模糊滤波
image.save('code.jpg', 'jpeg')    #保存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mr.杰瑞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值