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 16:12:35 浏览: 46
这是一个使用Python中的PIL库和numpy库对一张灰度图像进行立体化处理的代码。首先将图像读入并转换为灰度图像,并将其存储为一个numpy数组。然后使用numpy中的gradient函数计算图像灰度的梯度,并将其分别归一化为x和y方向的梯度值。接下来,根据光源的俯视角度和方位角度,计算出光源对x、y和z方向的影响因子,并将它们分别乘以每个方向上的梯度值,得到还原后的灰度值。最后,将处理后的图像保存为一个新的文件。
相关问题
import numpy as np import matplotlib.pyplot as plt from PIL import Image im=np.array(Image.open(r"C:\Users\augus\Desktop\1.jpg")) print(im.shape)
这段代码中,第一行导入了numpy、matplotlib.pyplot和PIL中的Image模块。第二行使用numpy中的array函数将一张图片读入并转化为numpy数组。第三行打印了该图片的形状,即行数、列数和通道数。由于该图片是RGB彩色图像,因此它的形状是一个三元素的元组,分别表示行数、列数和通道数。例如,如果打印结果为(480, 640, 3),则表示该图片有480行、640列、3个通道。
代码解析:import os import numpy as np import matplotlib.pyplot as plt from PIL import Image import neurolab as nl
这段代码导入了四个库:os、numpy、matplotlib和PIL。其中,os库提供了一些与操作系统交互的功能,如文件和目录处理。numpy库则提供了对多维数组的支持,以及各种数学函数和线性代数操作。matplotlib库是用于绘制图形的库,可以生成各种类型的图形,如折线图、散点图、直方图等。最后,PIL库是Python图像处理库,提供了对图像文件的读取、修改、保存等功能。这段代码还导入了neurolab库,这是一个用于神经网络模型设计和训练的Python库。