Python 图片处理(1) 如何增加亮度、如何添加颜色滤镜 、如何模糊图片(Pillow PIL)

文章目录

  • 载入图片
    • 载入各种包
    • 载入图片
  • 压缩图片
  • 滤镜
    • 增加明亮度
      • RGB是什么
      • 增加明亮度
    • 添加一个红色滤镜
      • 紫色滤镜
    • PIL模糊滤镜

载入图片

载入各种包

# import packages
from PIL import Image
from PIL import ImageFilter
import numpy as np
import numpy as np
import pandas as pd
import re
import matplotlib.pyplot as mpl
from urllib.parse import urlparse
import urllib.robotparser

# 一个check能不能fetch的方程
def canFetch(url):

    parsed_uri = urlparse(url)
    domain = '{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri)

    rp = urllib.robotparser.RobotFileParser()
    rp.set_url(domain + "/robots.txt")
    try:
        rp.read()
        canFetchBool = rp.can_fetch("*", url)
    except:
        canFetchBool = None
    
    return canFetchBool

载入图片

这里我选择了一张曝光度不够高的图片

查看是不是能通过打开,如果能,就用urllib打开图片

url = 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591003793908&di=6ea0016b97fbcfe029c040421a585e33&imgtype=0&src=http%3A%2F%2Fn.sinaimg.cn%2Ffront%2F265%2Fw640h425%2F20181002%2FeAw0-hktxqah3979676.jpg'

if canFetch(url):
    image = Image.open(urllib.request.urlopen(url))
display(image)

Python 图片处理(1) 如何增加亮度、如何添加颜色滤镜 、如何模糊图片(Pillow PIL)_第1张图片

压缩图片

我们将长和宽都除以4,相当于变成了原来图片1/16的大小。

sImg = image
w,h=sImg.size
dImg=sImg.resize((int(w/4),int(h/4)),Image.ANTIALIAS)
display(dImg)

Python 图片处理(1) 如何增加亮度、如何添加颜色滤镜 、如何模糊图片(Pillow PIL)_第2张图片

滤镜

增加明亮度

RGB是什么

首先我们要知道RGB是Red,Green,Blue红绿蓝。图片里所有的色块都是由这三个参数组成的。
我们可以将我们的图片转换成一个np.array:

print(np.array(dImg).shape)
np.array(dImg)

大概是这样

(106, 160, 3)
array([[[74, 78, 89],
        [76, 80, 92],
        [77, 81, 92],
        ...,
        [70, 74, 85],
        [70, 75, 86],
        [72, 76, 88]],

       [[70, 76, 90],
        [71, 78, 92],
        [72, 78, 92],
        ...,
        [68, 74, 88],
        [68, 74, 88],
        [66, 73, 86]],

       [[67, 77, 93],
        [69, 78, 95],
        [69, 79, 95],
        ...,
        [65, 75, 91],
        [64, 73, 89],
        [61, 70, 87]],

       ...,

       [[10, 14, 23],
        [10, 14, 23],
        [10, 14, 23],
        ...,
        [ 3,  6, 15],
        [ 5,  8, 17],
        [ 5,  8, 17]],

       [[ 9, 13, 22],
        [ 9, 13, 22],
        [ 9, 13, 22],
        ...,
        [ 1,  4, 13],
        [ 2,  5, 14],
        [ 2,  5, 14]],

       [[ 9, 13, 22],
        [ 9, 13, 22],
        [ 9, 13, 22],
        ...,
        [ 2,  5, 14],
        [ 1,  4, 13],
        [ 0,  3, 12]]], dtype=uint8)

shape为(106,160,3)。
106是图片的高,160是图片的长,第三个数就是RGB的长度(都是3)
每一行的第一个数就是Red系数,越高(最高255)代表红色越多,越低(最低0)代表红色越少。
全黑是(0,0,0)
全白是(255,255,255)
正红色是(255,0,0)
绿色,蓝色同理。

增加明亮度

在明白了这个array究竟有什么意义之后,我们来增加明亮度。
越接近255,也就越偏向白色。所以我们要做的就是增加array里每一个数值

#通过不断调试这个相乘的系数,我确定了2.5是最佳的
bright_arr = np.array(dImg)*2.5
bright_arr = bright_arr.astype('uint8') 
image_bright = Image.fromarray(bright_arr)
display(image_bright)

Python 图片处理(1) 如何增加亮度、如何添加颜色滤镜 、如何模糊图片(Pillow PIL)_第3张图片

添加一个红色滤镜

我们可以通过将每个色块(pixel)红色的指数全部改成200.

bright_arr[:,:,0] = 200

bright_arr = bright_arr.astype('uint8') 
image_red = Image.fromarray(bright_arr)
display(image_red)

Python 图片处理(1) 如何增加亮度、如何添加颜色滤镜 、如何模糊图片(Pillow PIL)_第4张图片

紫色滤镜

当然我们可以通过自己“调色”,添加除了基础色以外的滤镜。比如我知道红加蓝等于紫色。我可以加一个紫色滤镜

bright_arr[:,:,0] = 200
bright_arr[:,:,2] = 200
bright_arr = bright_arr.astype('uint8') 
image_purple = Image.fromarray(bright_arr)
display(image_purple)

Python 图片处理(1) 如何增加亮度、如何添加颜色滤镜 、如何模糊图片(Pillow PIL)_第5张图片

PIL模糊滤镜

PIL有很多的filter,可以百度一下都有哪些。这里我应用了模糊滤镜,将原来清晰的图片变得模糊。

blurred_image = image_purple.filter(ImageFilter.BLUR)
display(blurred_image)

Python 图片处理(1) 如何增加亮度、如何添加颜色滤镜 、如何模糊图片(Pillow PIL)_第6张图片

你可能感兴趣的:(图片处理)