Python实训day08am【网络爬虫selenium、图像处理入门】

目录

1、网络爬虫-selenium(歌曲与歌词)

2、图像处理

2.1、安装库

2.2、图片处理

2.3、马赛克

2.4、副本-缩略图-粘贴-创建新图

2.5、代码汇总


 

 

 

1、网络爬虫-selenium(歌曲与歌词)

详见博客园笔记。CSDN审核过于严格,内容不通过。lu16 - 博客园

2、图像处理

Python  Pillow库,简单的图像处理:增强编程思维和编程能力。        图像识别OpenCV

  1. 了解图片的像素处理等相关内容;
  2. 调用库方法,完成图片的缩放、裁剪、滤镜、翻转等操作。

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是我们自己创建的纯色图片,根据需要可以换成已有的图片,这样可以实现多张小图片合成一张大图片的效果

《蛊真人》

半部人祖传,靡靡惑人心。

崖边疯红莲,捧水拓春秋。

局中局酒虫儿自笑傲,王中王狼族谁敢言雄。

遥望乡土山如故,人心不故福寿长。

问长生猴王束手,觅永恒方源破局。

书生有意,戏子望怜,却难敌那名伶一句,律法森严。

  

おすすめ

転載: blog.csdn.net/weixin_44949135/article/details/122473961