一、原理
图像一般使用RGB色彩模式,即每个像素点的颜色由Red,Green,Blue组成
图像是一个由像素组成的二维矩阵,每个元素是一个RGB值
图像的数组表示:
图像是一个三维数组,维度分别是高度、宽度和像素RGB值
二、代码实现
1、
import numpy as np
from PIL import Image
df=np.array(Image.open(r"C:\Users\k\Desktop\QQ图片20191103152635.jpg"))
print(df.shape,df.dtype)
b=[255,255,255]-df
im=Image.fromarray(b.astype('uint8'))
im.save(r"C:\Users\k\Desktop\01.jpg")
2、convert()函数将彩色图片变成一个灰色图片,df对应图片中每一个元素的灰度值,是一个二维数组
import numpy as np
from PIL import Image
df=np.array(Image.open(r"C:\Users\k\Desktop\QQ图片20191103152635.jpg").convert('L'))
print(df.shape,df.dtype)
b=255-df
im=Image.fromarray(b.astype('uint8'))
im.save(r"C:\Users\k\Desktop\01.jpg")
3、区间变换
import numpy as np
from PIL import Image
df=np.array(Image.open(r"C:\Users\k\Desktop\abd.jpg").convert('L'))
c=(100/255)*df+150
im=Image.fromarray(c.astype('uint8'))
im.show(r"C:\Users\k\Desktop\111.jpg")
4、像素平方
import numpy as np
from PIL import Image
df=np.array(Image.open(r"C:\Users\k\Desktop\abd.jpg").convert('L'))
c=255*(df/255)**2
im=Image.fromarray(c.astype('uint8'))
im.show(r"C:\Users\k\Desktop\11.jpg")
5、手绘图像的实现
import numpy as np
from PIL import Image
a=np.array(Image.open(r"C:\Users\k\Desktop\abd.jpg").convert('L')).astype('float')
depth=10
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.)
unit_x=grad_x/A
unit_y=grad_y/A
unit_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.sin(vec_e1)*np.sin(vec_az) #光源对y轴的影响
dz=np.sin(vec_e1) #光源对z轴的影响
b=255*(dx*unit_x+dy*unit_y+dz*unit_z)#光源归一化
b=b.clip(0,255)
im=Image.fromarray(b.astype('uint8')) #重构图像
im.save(r"C:\Users\k\Desktop\uu.jpg")
本文介绍了图像处理的基本原理,包括RGB色彩模式和图像的数组表示。通过Python代码展示了如何使用numpy和PIL库将彩色图片转换为灰度图像,并进行了区间变换和像素平方操作,创造出不同的视觉效果。最后,详细阐述了实现手绘图像的过程,涉及图像梯度、光照计算等高级技巧。
555

被折叠的 条评论
为什么被折叠?



