from PIL import Image import numpy as np im = np.array(Image.open("C:/Users\汤健\Pictures\艾伦.jpg").convert('L')) print(im.shape, im.dtype) im1 = 255-im im2 = (100/255)*im+150 im3 = 255*(im1/255)**2 pil_im = Image.fromarray(np.uint(im3)) pil_im.show() from PIL import Image import numpy as np a = np.asarray(Image.open("C:/Users\汤健\Pictures\艾伦.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 # x,y,z表示图像平面的单位法向量在三个轴上的投影 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) # 舍弃溢出的灰度值 hm = Image.fromarray(b.astype('uint8')) hm.save('D:\\2.jpg')
时间: 2023-07-15 09:11:49 浏览: 147
PIL.Image.open和cv2.imread的比较与相互转换的方法
5星 · 资源好评率100%
这段代码是使用Python的PIL库对一张灰度图像进行立体化处理,并增加了光源效果,最后保存结果图片。其中使用到了numpy库计算图像梯度和向量运算。代码主要步骤如下:
1. 使用PIL库读取灰度图像并转换为numpy数组格式。
2. 定义立体化的深度值,并计算图像梯度。
3. 对横纵灰度值梯度进行归一化,并计算单位法向量在三个轴上的投影。
4. 定义虚拟光源的俯视角度和方位角度,并计算光源对各方向的影响因子。
5. 将各方向的梯度分别乘上虚拟光源对各方向的影响因子,将梯度还原成灰度。
6. 将灰度值限制在0-255之间,并保存结果图片。
这段代码主要用于图像处理相关领域,可以用于美化图片,增强图片的立体感和视觉效果。
阅读全文