python数据分析与展示--图像的手绘效果

目录

 一.图像的数组表示

        1.图像的RGB色彩模式

        2.PIL库

二.图像变换

        1.image转换成array

        2.array转换成image

三.图像的手绘效果

        1.实例介绍  ​

        2.编程实例


 一.图像的数组表示

1.图像的RGB色彩模式

RGB三个颜色通道的变化和叠加得到各种颜色,且包括了人类视力所能感受到的所有颜色,其中:

·R 红色,取值范围0~255

·G 绿色,取值范围0~255

·B 蓝色,取值范围0~255


2.PIL库

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

Image是PIL库中代表一个图像的类

导入方式:

from PIL import Image

python数据分析与展示--图像的手绘效果_第1张图片

图像的数组表示代码实例:

from PIL import Image
import numpy as np

im=np.array(Image.open("C:/Users/myun/Pictures/不知火舞.jpg"))
print(im.shape,im.dtype)

'''(251, 180, 3) uint8'''

 图像是一个维数组,维度分别是高度,宽度和像素RGB值


二.图像变换

思路:读取图像后,获取像素RGB值,修改后保存为新文件

1.image转换成array

im=np.asarray(image)

代码:

from PIL import Image
import numpy as np

im=np.asarray(Image.open("C:/Users/myun/Pictures/bl.jpg"))
print(im.shape,im.dtype)
'''(400, 600,3) uint8'''

2.array转换成image

Image.fromarray(np.uint8(img))

图像变换代码实例:

from PIL import Image
import numpy as np

im=np.array(Image.open("C:/Users/myun/Pictures/bl.jpg"))
print(im.shape,im.dtype)
c=[255,255,255]-im
b=Image.fromarray(c.astype('uint8'))
b.save("C:/Users/myun/Pictures/bl2.jpg")
'''(400, 600,3) uint8'''

 效果:

python数据分析与展示--图像的手绘效果_第2张图片

python数据分析与展示--图像的手绘效果_第3张图片  

 


couvert()是图像实例对象的一个方法,接受一个mode参数,用以指定一种色彩模式

·1:1位像素,黑白,每个字节存储一个像素

·L:8位像素,黑白

·P:8位像素,使用调色板映射到任何其他模式

·RGB:3x8位像素,真色彩

·RGBA:4x8位像素,带透明度掩模的真色彩

·CMYK:4x8位像素,分色

·YCbCr:3x8位像素,彩色视频格式

·l:32位有符号整数像素

·F:32位浮点数像素

from PIL import Image
import numpy as np

im=np.array(Image.open("C:/Users/myun/Pictures/bl.jpg").convert('L'))
print(im.shape,im.dtype)
c=255-im
b=Image.fromarray(c.astype('uint8'))
b.save("C:/Users/myun/Pictures/bl1.jpg")
'''(400, 600) uint8'''

效果:

python数据分析与展示--图像的手绘效果_第4张图片 

变成:

python数据分析与展示--图像的手绘效果_第5张图片 


区间变换:

from PIL import Image
import numpy as np

a=np.asarray(Image.open("C:/Users/myun/Pictures/bl.jpg").convert('L'))
b=(100/255)*a+150  #区间变换
im=Image.fromarray(b.astype('uint8'))
im.save("C:/Users/myun/Pictures/b3.jpg")

效果:

python数据分析与展示--图像的手绘效果_第6张图片


像素平方:

from PIL import Image
import numpy as np

a=np.asarray(Image.open("C:/Users/myun/Pictures/bl.jpg").convert('L'))
b=255*(a/255)**2  #像素平方
im=Image.fromarray(b.astype('uint8'))
im.save("C:/Users/myun/Pictures/b4.jpg")

 效果:

python数据分析与展示--图像的手绘效果_第7张图片


三.图像的手绘效果

1.实例介绍  python数据分析与展示--图像的手绘效果_第8张图片

 python数据分析与展示--图像的手绘效果_第9张图片

手绘图片效果代码:

from PIL import Image
import numpy as np

a=np.asarray(Image.open("C:/Users/myun/Pictures/bl.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)
b=255*(dx*uni_x+dy*uni_y+dz*uni_z)  #光源归一化
b=b.clip(0,255)
im=Image.fromarray(b.astype('uint8'))
im.save("C:/Users/myun/Pictures/bl4.jpg")

原图:

python数据分析与展示--图像的手绘效果_第10张图片

手绘图:

python数据分析与展示--图像的手绘效果_第11张图片 


2.编程实例

python数据分析与展示--图像的手绘效果_第12张图片 

 python数据分析与展示--图像的手绘效果_第13张图片

 python数据分析与展示--图像的手绘效果_第14张图片

 python数据分析与展示--图像的手绘效果_第15张图片

python数据分析与展示--图像的手绘效果_第16张图片python数据分析与展示--图像的手绘效果_第17张图片 

 

 

你可能感兴趣的:(数据分析,python,开发语言)