【7】图形相关-1-图像的手绘--pillow

PIL ,python image library PIL是一个具有强大图像处理的第三方库

##一、简介

安装方式: pip install pillow from pillow import Image

#coding:UTF-8
from PIL import Image
import numpy as np

im = np.array(Image.open('thumb_IMG_0082_1024.jpg'))

print im.shape,im.dtype
#(480, 720, 3) uint8
#图像是一个三维数组,维度分别是高度,宽度,和像素的RGB值

二.图像的变换

1.读入图像,获得像素rgb值,修改后另存为新的图像

#coding:UTF-8
from PIL import Image
import numpy as np

im = np.array(Image.open('thumb_IMG_0082_1024.jpg'))

print im.shape,im.dtype
#(480, 720, 3) uint8

b = [255,255,255] - im

im2 = Image.fromarray(b.astype('uint8'))
im2.save('changed.jpg')

案例2:

#coding:UTF-8
from PIL import Image
import numpy as np

im = np.array(Image.open('thumb_IMG_0082_1024.jpg').convert('L')) #convert 将彩图变为灰色的图,

print im.shape,im.dtype
#(480, 720) uint8


b = 255 - im

im2 = Image.fromarray(b.astype('uint8'))
im2.save('changed2.jpg')

案例3:

#coding:UTF-8
from PIL import Image
import numpy as np

im = np.array(Image.open('thumb_IMG_0082_1024.jpg').convert('L')) #convert 将彩图变为灰色的图,

print im.shape,im.dtype
#(480, 720) uint8


# c = (100/255)*im+150
c = 255*(im/255)**2

im2 = Image.fromarray(c.astype('uint8'))
im2.save('changed3.jpg')

图像的手绘效果

手绘效果的几个特征:

  • 黑白灰色
  • 边界线条比较重
  • 相同或相近的色彩趋向于白色
  • 略有光源效果

案例:

#coding:UTF-8

from PIL import Image
import numpy as np

a = np.asarray(Image.open('thumb_IMG_0082_1024.jpg').convert('L')).astype('float')

depth = 10.                      # (0-100)
grad = np.gradient(a)             #取图像灰度的梯度值
grad_x, grad_y = grad               #分别取横纵图像梯度值
grad_x = grad_x*depth/100.
grad_y = grad_y*depth/100.
A = np.sqrt(grad_x**2 + grad_y**2 + 1.)
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1./A

vec_el = np.pi/2.2                   # 光源的俯视角度,弧度值
vec_az = np.pi/4.                    # 光源的方位角度,弧度值
dx = np.cos(vec_el)*np.cos(vec_az)   #光源对x 轴的影响
dy = np.cos(vec_el)*np.sin(vec_az)   #光源对y 轴的影响
dz = np.sin(vec_el)              #光源对z 轴的影响

b = 255*(dx*uni_x + dy*uni_y + dz*uni_z)     #光源归一化
b = b.clip(0,255)

im = Image.fromarray(b.astype('uint8'))  #重构图像
im.save('./changed4.jpg')

四、讨论

4.1 图片在IE中不显示的原因

CMYK模式(印刷模式)的,IE中必须是RGB模式

解决办法:

from PIL import Image

image = Image.open(img_name)
image = image.convert('RGB')
image.save(img_name)

参考资料

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn