【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)
参考资料
- 北京理工大学 嵩山老师 课件
- https://m.jb51.cc/linux/440049.html
这里是一个广告位,,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn