zoukankan      html  css  js  c++  java
  • python科学计算库numpy和绘图库PIL的结合,素描图片(原创)

    # 导入绘图库
    from PIL import Image
    #导入科学计算库
    import numpy as np 
    
    
    #封装一个图像处理工具类
    class TestNumpy(object):
    
        def photo2paint(self,img_url):
            #读取图片,asarray()转矩阵    convert('L')转变成像素化     astype()转元素类型
            my_photo = np.asarray(Image.open(img_url).convert('L')).astype('float')
            print(my_photo)
            print(my_photo.dtype)
            print(my_photo.shape)
            print(my_photo.size)
            print('矩阵是 {} 维度'.format(my_photo.ndim))
            print('元素 {} 字节'.format(my_photo.itemsize))
    
            #设置灰度阈值   范围是(0-100)
            depth = 10
    
            #将灰度系数映射到numpy
            grad = np.gradient(my_photo)
    
            #获取坐标
            grad_x,grad_y = grad
    
            #分别处理,淡化灰度
            grad_x = grad_x * depth / 300
            grad_y = grad_y * depth / 300
    
            #设置阿尔法值
            #设置坐标范围
            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
    
            #设置x轴和y轴
            dx = np.cos(vec_el) * np.cos(vec_az)  #余玄
            dy = np.cos(vec_el) * np.sin(vec_az)
    
            #设置z轴
            dz = np.sin(vec_el)
    
            #设置byte值
            b = 255 * (dx*uni_x+dy*uni_y+dz*uni_z)
            #光源归一化
            b = b.clip(0,255)
    
            #声明图像类对象
            im = Image.fromarray(b.astype('uint8'))
            #保存图像
            im.save('./test_new.jpg')
    
    
    if __name__ == "__main__":
        tn = TestNumpy()
        tn.photo2paint('./test_numpy.jpg')
  • 相关阅读:
    hihoCoder#1040 矩形判断
    hihoCoder#1038 01背包
    hihoCoder#1037 数字三角形
    hihoCoder#1120 小Hi小Ho的惊天大作战:扫雷·三
    hihoCoder#1119 小Hi小Ho的惊天大作战:扫雷·二
    Python核心编程读笔 3
    Python核心编程读笔 2
    EC读书笔记系列之12:条款22、23、24
    Linux程序设计 读笔2 Shell脚本
    Linux程序设计 读笔1
  • 原文地址:https://www.cnblogs.com/justblue/p/10482403.html
Copyright © 2011-2022 走看看