【北京理工大学-Python 数据分析-1.3图象的手绘效果】

(一)图象的数组表示
图象的RGB色彩模式
RGB三色通道的变化和叠加得到各种颜色,其中:

  • R红色,取值范围,0-255。
  • G绿色,取值范围,0-255。
  • B蓝色,取值范围,0-255。
    RGB形成的颜色包括了人类试利所能感知的所有颜色。

Python中的图像处理库PIL

PIL,Python Image Library
PIL库是一个具有强大图像处理能力的第三方库。
在命令行下安装的方法:pip install pillow
from PIL import Image
Image 是PIL库中代表一个图象的类(对象)。

图象的数组表示
计算机中图象由像素组成的二维矩阵,每个元素是一个RGB值。

from PIL import Image
import numpy as np
a=np.array(Image.open("C:/Users/42137/Desktop/微信图片_20221030230325.jpg"))
print(im.shape,im.dtype)
##(2656, 3984, 3) uint8,图象是一个三维数组,维度分别是高度、宽度和像素RGB值。,在第三维度上的RGB值用unit8的格式进行表示。

图象的变换
1、求取图象的补值

from PIL import Image
import numpy as np
a=np.array(Image.open("C:/Users/42137/Desktop/微信图片_20221030230325.jpg"))##图象的读入
b=[255,255,255]-a##计算图像的补值。
im=Image.fromarray(b.astype('uint8'))
im.save("C:/Users/42137/Desktop/微信图片_20221030230325_1.jpg")

2、图象的灰度化处理

from PIL import Image
import numpy as np
a=np.array(Image.open("C:/Users/42137/Desktop/微信图片_20221030230325.jpg").convert('L'))##图象的读入,并使用convert转化成灰度图像
b= 255- a##计算图像的补值。
im=Image.fromarray(b.astype('uint8'))
im.save("C:/Users/42137/Desktop/微信图片_20221030230325_2.jpg")

3、图象的灰度值的区间压缩

from PIL import Image
import numpy as np
a=np.array(Image.open("C:/Users/42137/Desktop/微信图片_20221030230325.jpg").convert('L'))##图象的读入,并使用convert转化成灰度图像
c= (100/255)*a+150##灰度化后的图象的区间压缩、区间变换。
im=Image.fromarray(c.astype('uint8'))
im.save("C:/Users/42137/Desktop/微信图片_20221030230325_3.jpg")

4、像素平方化处理

from PIL import Image
import numpy as np
a=np.array(Image.open("C:/Users/42137/Desktop/微信图片_20221030230325.jpg").convert('L'))##图象的读入,并使用convert转化成灰度图像
d= 255*(a/255)**2##像素平方
im=Image.fromarray(d.astype('uint8'))
im.save("C:/Users/42137/Desktop/微信图片_20221030230325_4.jpg")

(二)实例:图象的手绘效果

手绘图象的几个特征:

  • 黑白灰色
  • 边界线条较重
  • 相同或相近色彩趋于白色
  • 略有光源效果
    【北京理工大学-Python 数据分析-1.3图象的手绘效果】_第1张图片

【北京理工大学-Python 数据分析-1.3图象的手绘效果】_第2张图片
【北京理工大学-Python 数据分析-1.3图象的手绘效果】_第3张图片

【北京理工大学-Python 数据分析-1.3图象的手绘效果】_第4张图片
【北京理工大学-Python 数据分析-1.3图象的手绘效果】_第5张图片

from PIL import Image
import numpy as np
a=np.array(Image.open("C:/Users/42137/Desktop/微信图片_20221030230325.jpg").convert('L')).astype('float')##图象的读入,并使用convert转化成灰度图像
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_e1=np.pi/2.2 ##光源的俯视角度,弧度值
vec_az=np.pi/4   ##光源的方位角度,弧度值
dx=np.cos(vec_e1)*np.cos(vec_az)  ##光源对x轴的影响
dy=np.cos(vec_e1)*np.sin(vec_az)##光源对y轴的影响
dz=np.sin(vec_e1)  ##光源对z轴的影响
b=255*(dx*uni_x+dy*uni_y+dz*uni_z)  ##光源归一化
b=b.clip(0,255)
im=Image.formarray(b.astype('uints'))##图象重构
im.save(im.save("C:/Users/42137/Desktop/微信图片_20221030230325_5.jpg")



你可能感兴趣的:(python,数据分析,numpy)