python 特效之图片处理

对于 图片处理,在日常生活中我们常常能够看到。


比如发个朋友圈之前,我们需要给自己的照片加个滤镜;在上传头像时候,需要对照片进行裁剪,这些都是图片的处理。


python 特效之图片处理

待处理的原图


一、黑白特效

  • 将图片处理后,变为黑白颜色
  • 把像素的 R,G,B 三个通道数值都置为:r*0.299+g*0.587+b*0.114
  • 效果

python 特效之图片处理

黑白特效

  • 代码
#!/usr/bin/env python
# encoding: utf-8

import numpy as np
from PIL import Image

class picture:
    '''
     This is a main Class, the file contains all documents.
     One document contains paragraphs that have several sentences
     It loads the original file and converts the original file to new content
     Then the new content will be saved by this class
    '''
    def __init__(self):
        self.path = 'assets/picture.jpeg'

    def hello(self):
        '''
        This is a welcome speech
        :return: self
        '''
        print('*' * 50)
        print(' ' * 20 + '图片转换特效之黑白')
        print(' ' * 5 + '作者: autofelix  Date: 2022-01-17 13:14')
        print('*' * 50)
        return self

    def run(self):
        '''
        The program entry
        '''
        im = self.to_black_white()
        im.show()
        im.save('assets/black_white.jpeg')

    def to_black_white(self):
        '''
        Picture to black white
        '''
        im = np.asarray(Image.open(self.path).convert('RGB'))
        trans = np.array([[0.299, 0.587, 0.114], [0.299, 0.587, 0.114], [0.299, 0.587, 0.114]]).transpose()
        im = np.dot(im, trans)
        return Image.fromarray(np.array(im).astype('uint8'))

if __name__ == '__main__':
    picture().hello().run()


二、流年特效

  • 将图片处理后,变为流年特效
  • 把 R 通道的数值开平方,然后乘以一个参数
  • 效果

python 特效之图片处理

流年特效

  • 代码
#!/usr/bin/env python
# encoding: utf-8

import numpy as np
from PIL import Image

class picture:
    '''
     This is a main Class, the file contains all documents.
     One document contains paragraphs that have several sentences
     It loads the original file and converts the original file to new content
     Then the new content will be saved by this class
    '''
    def __init__(self):
        self.path = 'assets/picture.jpeg'

    def hello(self):
        '''
        This is a welcome speech
        :return: self
        '''
        print('*' * 50)
        print(' ' * 20 + '图片转换特效之流年')
        print(' ' * 5 + '作者: autofelix  Date: 2022-01-17 13:14')
        print('*' * 50)
        return self

    def run(self):
        '''
        The program entry
        '''
        im = self.fleeting()
        im.show()
        im.save('assets/fleeting.jpeg')

    def fleeting(self, params=12):
        '''
        Picture to fleeting
        '''
        im = np.asarray(Image.open(self.path).convert('RGB'))
        im1 = np.sqrt(im * [1.0, 0.0, 0.0]) * params
        im2 = im * [0.0, 1.0, 1.0]
        im = im1 + im2
        return Image.fromarray(np.array(im).astype('uint8'))

if __name__ == '__main__':
    picture().hello().run()


三、旧电影特效

  • 将图片处理后,变为旧电影特效
  • 把像素的 R,G,B 三个通道数值,3 个通道的分别乘以 3 个参数后求和,最后把超过 255 的值置为 255
  • 效果

python 特效之图片处理

旧电影特效

  • 代码
#!/usr/bin/env python
# encoding: utf-8

import numpy as np
from PIL import Image

class picture:
    '''
     This is a main Class, the file contains all documents.
     One document contains paragraphs that have several sentences
     It loads the original file and converts the original file to new content
     Then the new content will be saved by this class
    '''
    def __init__(self):
        self.path = 'assets/picture.jpeg'

    def hello(self):
        '''
        This is a welcome speech
        :return: self
        '''
        print('*' * 50)
        print(' ' * 20 + '图片转换特效之旧电影')
        print(' ' * 5 + '作者: autofelix  Date: 2022-01-17 13:14')
        print('*' * 50)
        return self

    def run(self):
        '''
        The program entry
        '''
        im = self.old_film()
        im.show()
        im.save('assets/old_film.jpeg')

    def old_film(self):
        '''
        Picture to old film
        '''
        im = np.asarray(Image.open(self.path).convert('RGB'))
        trans = np.array([[0.393, 0.769, 0.189], [0.349, 0.686, 0.168], [0.272, 0.534, 0.131]]).transpose()
        im = np.dot(im, trans).clip(max=255)
        return Image.fromarray(np.array(im).astype('uint8'))

if __name__ == '__main__':
    picture().hello().run()


四、反色特效

  • 将图片处理后,变为反色特效
  • 这个最简单了,用 255 减去每个通道的原来的数值
  • 效果

python 特效之图片处理

反色效果

  • 代码
#!/usr/bin/env python
# encoding: utf-8

import numpy as np
from PIL import Image

class picture:
    '''
     This is a main Class, the file contains all documents.
     One document contains paragraphs that have several sentences
     It loads the original file and converts the original file to new content
     Then the new content will be saved by this class
    '''
    def __init__(self):
        self.path = 'assets/picture.jpeg'

    def hello(self):
        '''
        This is a welcome speech
        :return: self
        '''
        print('*' * 50)
        print(' ' * 20 + '图片转换特效之反色')
        print(' ' * 5 + '作者: autofelix  Date: 2022-01-17 13:14')
        print('*' * 50)
        return self

    def run(self):
        '''
        The program entry
        '''
        im = self.reverse()
        im.show()
        im.save('assets/reverse.jpeg')

    def reverse(self):
        '''
        Picture to reverse
        '''
        im = 255 - np.asarray(Image.open(self.path).convert('RGB'))
        return Image.fromarray(np.array(im).astype('uint8'))

if __name__ == '__main__':
    picture().hello().run()


上一篇:python 特效之千图成像


下一篇:《利用Python进行数据分析·第2版》第4章 NumPy基础:数组和矢量计算