python数据分析与展示-对图像的处理

文章目录

    • 1. 图像的数组表示
    • 2. 图像的变换
    • 3. 图像的手绘效果

北理工嵩天老师的慕课课程 《python数据分析与展示》学习笔记!

1. 图像的数组表示

图像一般使用RGB色彩模式,即每个像素点的颜色由红(R)、绿(G)、蓝(B)组成。RGB三个颜色通道的变化和叠加得到各种颜色,其中:

R红色:取值范围,0-255
G绿色:取值范围,0-255
B蓝色:取值范围,0-255

PIL(Python Imaging Library)是著名的图片处理第三方库,包含了基本的图像处理、特效合成、滤镜等方法。
安装方法:pip install pillow
引用方法:from PIL import Image

>>> from PIL import Image
>>> import numpy as np
>>> im = np.array(Image.open("E:/campus.JPG"))
>>> print(im.shape,im.dtype)
(2448, 3264, 3) uint8

由上例可以看出,图像是一个三维数组,维度分别为高度宽度像素RGB值

2. 图像的变换

读入图像后,获得像素RGB值,修改后保存为新的文件。

>>> # 续上例
>>> b = [255,255,255] - im
>>> a = Image.fromarray(b.astype('uint8'))
>>> a.save("E:/campus2.JPG")

同样,可以调用转换函数 convert(mode) 先转换色彩模式, convert(‘L’) 可以将一个彩色的图片转换为一个灰度图片!这样得到的数组也不再是一个三维数组,是一个二维数组,其中的每个元素所对应的是灰度值

>>> from PIL import Image
>>> import numpy as np
>>> a = np.array(Image.open("E:/campus.JPG").convert('L'))
>>> b = 255-a
>>> im = Image.fromarray(b.astype('uint8'))
>>> im.save("E:/campus3.JPG")

python数据分析与展示-对图像的处理_第1张图片

3. 图像的手绘效果

手绘效果的几个特征:
1.黑白灰色
2.边界线条较重
3.相同或相近色彩趋于白色
4.略有光源效果

from PIL import Image
import numpy as np
 
a = np.asarray(Image.open('./beijing.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('./beijingHD.jpg')

你可能感兴趣的:(python数据分析与展示-对图像的处理)