PIL库与图像变换以及图像手绘效果

 

一  图像的数组表示

通常使用RGB色彩模式,即每个像素点的颜色由红(R)、绿(G)、蓝(B)组成。

RGB三个颜色通道的变化和叠加得到各种颜色,其中:

R    红色,取值范围,255 ‐ 0

G   绿色,取值范围,255 ‐ 0

B   蓝色,取值范围,255 ‐ 0

RGB形成的颜色包括了人类视力所能感知的所有颜色。
 

二 PIL库

        PIL即Python Image Library,是一个具有强大图像处理能力的第三方库.

       在命令行下的安装方法:pip install pillow


       PIL库支持图像存储、显示和处理,能处理几乎所有的图片图片格式,可以完成对图像的缩放,剪裁叠加以及向图

像添加线条,图像和文字等操作。主要实现功能如下:

(1)图像归档:批处理、生成图像预览、图像格式转换

(2)图像处理:基本处理、像素处理、颜色处理

根据功能不同,PIL库共包括21个与图片有关的类,这些库也看作子库。本文主要针对Iamge

 

 

三 图像的数组表示

 

from PIL import Image
import numpy as np
im=Image.open('E:\\test.jpg')
a=np.array(im)
print(a.shape,a.dtype)

(1263, 1749, 3) uint8

【注】图像是一个三维数组,维度分别是高度、宽度和像素RGB值

 

四  图像变换

from PIL import Image
import numpy as np
im=Image.open('E:\\test.jpg')
a=np.array(im)
b=[255,255,255]-a #变成相反的颜色
im=Image.fromarray(b.astype('uint8'))
im.save('E:\\test1.jpg')

from PIL import Image
import numpy as np
im=Image.open('E:\\test.jpg').convert(('L'))#convert变成黑白
a=np.array(im)
print(a.shape,a.dtype)
b=255-a #在对应的颜色通道减去他本身,形成黑白底片效果
im=Image.fromarray(b.astype('uint8'))
im.save('E:\\test2.jpg')

from PIL import Image
import numpy as np
im=Image.open('E:\\test.jpg').convert(('L'))
a=np.array(im)
b=(100/255)*a+150   #区间变换,生成颜色比较浅色的灰度图片
im=Image.fromarray(b.astype('uint8'))
im.save('E:\\test3.jpg')

 

from PIL import Image
import numpy as np
im=Image.open('E:\\test.jpg').convert(('L'))
a=np.array(im)
b=255*(a/255)**2   #像素平方,产生颜色较深的灰度图
im=Image.fromarray(b.astype('uint8'))
im.save('E:\\test4.jpg')

 

 五 图像手绘效果

from PIL import Image
import numpy as np
a=np.array(Image.open('E:\\test.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('E://tsetf.jpg')

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值