导入 numpy 、pil
numpy用来做矩阵运算,pil用来读取图片。
1
2
|
import numpy as np
from pil import image
|
读取图片,然后转换成rgb模式存在矩阵里
1
2
|
im = image. open (imagename).convert( 'rgb' )
arr = np.array(im)
|
查看arr的shape,可以看到arr是个3维的数组,数组大小等于 长*宽*3
1
2
|
in [ 566 ]: arr.shape
out[ 566 ]: ( 313 , 450 , 3 )
|
每个像素有3个数字表示,分别对应(r,g,b)
1
2
|
in [ 567 ]: arr[ 0 ][ 0 ]
out[ 567 ]: array([ 6 , 4 , 9 ], dtype = uint8)
|
原始图片
彩色转黑白
把像素的r,g,b三个通道数值都置为r*0.299+g*0.587+b*0.114
1
2
3
4
5
6
|
def blackwithe(imagename):
# r,g,b = r*0.299+g*0.587+b*0.114
im = np.asarray(image. open (imagename).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' ))
|
流年
把r通道的数值开平方,然后乘以一个参数
1
2
3
4
5
6
|
def fleeting(imagename,params = 12 ):
im = np.asarray(image. open (imagename).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' ))
|
旧电影
把像素的r,g,b三个通道数值,3个通道的分别乘以3个参数后求和,最后把超过255的值置为255
1
2
3
4
5
6
7
|
def oldfilm(imagename):
im = np.asarray(image. open (imagename).convert( 'rgb' ))
# r=r*0.393+g*0.769+b*0.189 g=r*0.349+g*0.686+b*0.168 b=r*0.272+g*0.534b*0.131
trans = np.array([[ 0.393 , 0.769 , 0.189 ],[ 0.349 , 0.686 , 0.168 ],[ 0.272 , 0.534 , 0.131 ]]).transpose()
# clip 超过255的颜色置为255
im = np.dot(im,trans).clip( max = 255 )
return image.fromarray(np.array(im).astype( 'uint8' ))
|
反色
这个最简单了,用255减去每个通道的原来的数值
1
2
3
|
def reverse(imagename):
im = 255 - np.asarray(image. open (imagename).convert( 'rgb' ))
return image.fromarray(np.array(im).astype( 'uint8' ))
|
ps:示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
from pil import image, imagefilter
# 打开一个jpg图像文件,注意是当前路径:
im = image. open ( 'penguins.jpg' )
# 模糊
im2 = im. filter (imagefilter.blur)
# 模糊可设置模糊的程度
im22 = im. filter (imagefilter.boxblur( 200 ))
# 轮廓滤波
im3 = im. filter (imagefilter.contour)
# 边缘增强滤波(锐化)
im4 = im. filter (imagefilter.edge_enhance)
# 浮雕滤波
im5 = im. filter (imagefilter.emboss)
# 寻找边缘信息的滤波
im6 = im. filter (imagefilter.find_edges)
im2.save( 'blur.jpg' , 'jpeg' )
im3.save( 'contour.jpg' , 'jpeg' )
im4.save( 'edge_enhance.jpg' , 'jpeg' )
im5.save( 'emboss.jpg' , 'jpeg' )
im6.save( 'find_edges.jpg' , 'jpeg' )
im22.save( 'boxblur(200).jpg' , 'jpeg' )
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/u010950854/article/details/72794168