zoukankan      html  css  js  c++  java
  • 数据分析与展示---图像的手绘效果

    一:图像的相关知识了解

     

    二:图像的数组表示

    三:图像的变换

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

     

     

    四:图像的手绘效果案例分析

    五:图像手绘实现

    from PIL import Image
    import numpy as np
    
    a = np.asarray(Image.open("./1.png").convert('L')).astype('float')
    print(a.shape)  #灰度图像是二维数组
    print(a)    #n行m列,当对于这个行列上的值就是灰度值
    depth = 10.             #预设深度值为10,深度值的取值范围可以是0-100
    grad = np.gradient(a)   #取图像的梯度值,含行列两个方向的梯度值
    grad_x,grad_y = grad  #天气x,y方向的梯度值
    grad_x = grad_x*depth/100.  #根据深度调整x,y方向的梯度值
    grad_y = grad_y*depth/100.
    A = np.sqrt(grad_x**2 + grad_y**2 + 1.)  #将原来的二维变三维归一化z轴值平方为1.-->√(x**2+y**2+z**2)--->就是对角值,三轴分别初一即可得归一化值
    uni_x = grad_x/A  #获得归一化x,都是小于1的
    uni_y = grad_y/A  #获得归一化y
    uni_z = 1./A  #获得归一化z
    
    vec_el = np.pi/2.2  #光源的俯视角度,弧度值(我们自己定义的∏/2.2接近90°)
    vec_az = np.pi/4.  #光源的方位角度,弧度值(我们自己定义的∏/4接近45°)
    dx = np.cos(vec_el)*np.cos(vec_az)  #光源对x轴的影响,都是小于1  就是三维空间三角函数运算
    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)    #光源归一化,需要乘以255
    b = b.clip(0,255)  #防止值溢出0-255,需要进行截取
    
    im = Image.fromarray(b.astype("uint8")) #重构图像
    im.save("./2.png")

     

  • 相关阅读:
    html5 中的 css样式单 的 两种调用方式的区别
    互联网公司的相关人员及业务简介
    require.js 入门学习-备
    IOS修改webView背景透明以及IOS调用前台js的方法
    Javascript AMD模块化规范-备用
    Meta 的两个 相关属性
    <meta http-equiv="pragma" content="no-cache"/>
    css:中文词不断开,整体换行
    linux驱动开发---导出内核符号
    web html 防盗链
  • 原文地址:https://www.cnblogs.com/ssyfj/p/9291833.html
Copyright © 2011-2022 走看看