目录
1、网络爬虫-selenium(歌曲与歌词)
详见博客园笔记。CSDN审核过于严格,内容不通过。lu16 - 博客园
2、图像处理
Python Pillow库,简单的图像处理:增强编程思维和编程能力。 图像识别OpenCV
- 了解图片的像素处理等相关内容;
- 调用库方法,完成图片的缩放、裁剪、滤镜、翻转等操作。
Numpy+Pandas 大数据处理(2天)
2.1、安装库
安装库:pip install pillow;查看库是否已安装:from PIL import Image。pillow:一个简易的图形处理库。
2.2、图片处理
from PIL import Image
im = Image.open(r'C:\Users\lwx\Desktop\beauty.png');
im.show() # 调用默认的图像显示器
im # 展示图片
2.3、马赛克
马赛克原理分析:
# 马赛克、图像的合成、粘贴等
im = Image.open(r'C:\Users\qx\Desktop\beauty.png');
# 马赛克处理
# 图片中有很多小方块组成,
# 每个块中所有的像素点的值是一样的,所以我们看到是由一个个小方块组成的整体
# 假设取每个方块区域的左上角的那个像素点,作为整体像素点的统一取值
# 整体 1280x1280
# 假设方块大小是50x50
# 经过分析,对于坐标(x,y)它应该设置成(x//50*50,y//50*50)位置的像素
# 遍历所有的像素点,设置像素
w, h = im.size;
for x in range(w):
for y in range(h):
p = im.getpixel((x // 20 * 20, y // 20 * 20)); # 取值 (取更细节的粒度)
im.putpixel((x, y), p); # 设置值
im.show();
2.4、副本-缩略图-粘贴-创建新图
1.创建一张大图 (200*200)
2.创建n张各种随机颜色的小图(10*10),贴到大图上import random as rd
for x in range(20):
for y in range(20):
# x,y就自动对应粘贴时的坐标
small = Image.new('RGB', (10, 10), (rd.randint(0, 255), rd.randint(0, 255), rd.randint(0, 255)));
im.paste(small, (x * 10, y * 10));
im
2.5、代码汇总
from PIL import Image
im = Image.open(r'C:\Users\lwx\Desktop\beauty.png');
# im.show() # 调用默认的图像显示器
# im # 展示图片
# ----------------------------------------------------------------------
im.mode # RGB 图片的通道
'''
r:red、g:green、b:blue——光学3原色
计算机中任何一个像素点的色彩,是由红绿蓝三种颜色合成的,
所以在描述一个像素点颜色时,我们会使用"红绿蓝"三个值来表示.
红:0~255;绿:0~255;蓝:0~255
色彩的种类:256*256*256种色彩
html color background-color : #698742 rgb(125,223,145)
'''
# ----------------------------------------------------------------------
im.size # 元组
'''
元组tuple 【不增删的列表】
宽、高(单位:像素)
单位面积内,像素点越多【像素点越密集】,图像越清晰
1280*1280个像素点,每个像素点都有rgb三个值
大概的图片字节数:1280*1280*3
print(1280*1280*3 / 1024 /1024)
1903KB,在图片存储时有算法上的压缩
'''
print(1280 * 1280 * 3) # 4915200
print(1280 * 1280 * 3 / 1024) # 4800.0
print(1280 * 1280 * 3 / 1024 / 1024) # 4.6875
# ----------------------------------------------------------------------
p = im.getpixel((738, 476)); # (738, 476)位置的像素点
print(p) # (107, 134, 163)
# ----------------------------------------------------------------------
# 将每个通道(R\G\B\A)的像素,单独取出
print(im.mode) # RGB
ts = im.split(); # 分割通道(R通道数据、G通道数据、B通道数据)
print(len(ts)) # 3
# r = ts[0];
# g = ts[1];
# b = ts[2];
r, g, b = im.split(); # 居然还能这样赋值!分别赋值
print(type(r)); # <class 'PIL.Image.Image'>
print(r) # <PIL.Image.Image image mode=L size=1280x1280 at 0x1EE70FBC760>
print(r.mode) # L,表示单通道
# r、g、b,单通道也能展示图像,只是不同“感觉”的灰色
num = r.getpixel((738, 476));
print(num) # 你觉得值是什么?? 107 单通道
print(g.getpixel((738, 476))) # 134 单通道
print(b.getpixel((738, 476))) # 163 单通道
# ----------------------------------------------------------------------
# merge,合并通道与split相反
im3 = Image.merge("RGB", (r, g, b)); # 正常
im4 = Image.merge("RGB", (b, r, g)); # 通道混乱,图片很异常
# (107, 134, 163) - --> (163, 107, 134) # 每个像素点的颜色都变化了,这就导致图片整体变化
im4
# ----------------------------------------------------------------------
im = Image.open(r'C:\Users\lwx\Desktop\beauty.png');
# 每个像素点的rgb的值,都修改为(255-r, 255-g, 255-b)
# 取反得到曝光后的效果
im2 = im.point(lambda x: 255 - x); # 修改成反色,例如 本来值是0(黑),255-0得到了255(白)
# im2 = im.point(lambda x: 0); # 效果是纯黑
# im2 = im.point(lambda x: (x + 100) % 256); # 多种设置方式
im2
# 胶卷,柯达相机
# ----------------------------------------------------------------------
# 设置某一个像素点的值:im.putpixel((x坐标,y坐标),(r,g,b的值)) # 两个元组
# 灰色:(200,200,200)
# 426-408~825-513 范围所有像素点统统设置成灰色
im = Image.open(r'C:\Users\lwx\Desktop\beauty.png');
for x in range(426, 825):
for y in range(408, 514):
im.putpixel((x, y), (200, 200, 200));
im
# ----------------------------------------------------------------------
im = Image.open(r'C:\Users\lwx\Desktop\beauty.png');
# 切割
rect = (507, 648, 750, 753); # 左上角的两个~右下角的两个
im2 = im.crop(rect)
im2
# ----------------------------------------------------------------------
# 缩放
w, h = im.size;
# resize( (新宽度,新高度) )
im2 = im.resize((w // 5, h // 5)); # 宽度和高度都缩小5倍
im2
# ----------------------------------------------------------------------
# 旋转
im3 = im2.rotate(45); # 旋转45度
im3
# ----------------------------------------------------------------------
# 镜面
im3 = im2.transpose(Image.FLIP_LEFT_RIGHT) # Image.FLIP_TOP_BOTTOM
im3
# ----------------------------------------------------------------------
'''
滤镜处理
BLUR - 模糊处理
CONTOUR - 轮廓处理
DETAIL - 增强
EDGE_ENHANCE - 将图像的边缘描绘得更清楚
EDGE_ENHANCE_NORE - 程度比EDGE_ENHANCE更强
EMBOSS - 产生浮雕效果
SMOOTH - 效果与EDGE_ENHANCE相反,将轮廓柔和
SMOOTH_MORE - 更柔和
SHARPEN - 效果有点像DETAIL
'''
from PIL import ImageFilter
im3 = im.filter(ImageFilter.SMOOTH_MORE) # BLUR
im3
# ----------------------------------------------------------------------
# 马赛克、图像的合成、粘贴等
im = Image.open(r'C:\Users\lwx\Desktop\beauty.png');
'''
马赛克处理
图片中有很多小方块组成,
每个块中所有的像素点的值是一样的,所以我们看到是由一个个小方块组成的整体
假设取每个方块区域的左上角的那个像素点,作为整体像素点的统一取值
'''
# 整体1280x1280,假设方块大小是50x50
# 经过分析,对于坐标(x,y)它应该设置成(x//50*50,y//50*50)位置的像素
# 遍历所有的像素点,设置像素
w, h = im.size;
for x in range(w):
for y in range(h):
p = im.getpixel((x // 20 * 20, y // 20 * 20)); # 取值 (取更细节的粒度)
im.putpixel((x, y), p); # 设置值
im.show();
# ----------------------------------------------------------------------
# copy副本
# thumbnail缩略图
im1 = Image.open(r'C:\Users\lwx\Desktop\beauty.png');
im2 = im1.copy(); # 新对象,与原来的im1,一样
im2.thumbnail((100, 100)); # 此处im1没有变化
im2
# ----------------------------------------------------------------------
# paste粘贴
'''
函数/方法的调用:
有几个参数,参数类型是什么,参数表示什么意思
有没有返回值,返回的是什么东西
会不会修改原对象
(对于常见操作,常用函数,以上问题是需要非常明白清晰的)
90%(搬砖的)--->编程,就是调用各种函数(API接口)来处理数据 【过得很好 20k 30k,小康】
不知道调用哪个(缺少知识/缺少思路)、 对于知识的掌握很模糊,不成整体(感觉学了很多,但是又不知道学了什么)
难--->下的功夫不够,方向不对,缺少方法,没有得到合适的指点
'''
# 注意,paste没有返回值,直接修改原图
im.paste(im2, (0, 0)); # 将im2图片,贴到im图片的(0,0)位置(左上角)
im.paste(im2, (100, 0)); # 多贴几张
im.paste(im2, (200, 0));
im
# ----------------------------------------------------------------------
# new:新建图片(纯色)
# 模式、大小、颜色
# 参数很多,不要死记硬背,结合功能理解着去记忆
# 新建一张,宽500高500,白色的图片
im = Image.new('RGB', (200, 200), (255, 214, 214)); # 参数1为固定,参数2:宽高,参数3:颜色充填
im
# ----------------------------------------------------------------------
# 1.创建一张大图(200*200)
# 2.创建n张各种随机颜色的小图(10*10),贴到大图上
import random as rd
for x in range(20):
for y in range(20):
# x,y就自动对应粘贴时的坐标
small = Image.new('RGB', (10, 10), (rd.randint(0, 255), rd.randint(0, 255), rd.randint(0, 255)));
im.paste(small, (x * 10, y * 10));
im
# 以上小图片small是我们自己创建的纯色图片,根据需要可以换成已有的图片,这样可以实现多张小图片合成一张大图片的效果
《蛊真人》
半部人祖传,靡靡惑人心。
崖边疯红莲,捧水拓春秋。
局中局酒虫儿自笑傲,王中王狼族谁敢言雄。
遥望乡土山如故,人心不故福寿长。
问长生猴王束手,觅永恒方源破局。
书生有意,戏子望怜,却难敌那名伶一句,律法森严。