图像的手绘效果

来源:互联网 发布:伊娃格林知乎 编辑:程序博客网 时间:2024/04/30 05:50

图像的RGB色彩模式:

        图像一般使用RGB色彩模式,即每个像素点的颜色由红(R)、绿(G)、蓝(B)组成。

        RGB三个颜色通道的变化和叠加得到各种颜色,其中

        • R 红色,取值范围,0‐255

        • G 绿色,取值范围,0‐255

        • B 蓝色,取值范围,0‐255

        RGB形成的颜色包括了人类视力所能感知的所有颜色。

 

PIL库:

        PIL, Python Image Library

        PIL库是一个具有强大图像处理能力的第三方库,在命令行下的安装方法: pip install pillow

        from PIL import Image

        Image是PIL库中代表一个图像的类(对象)。

        图像是一个由像素组成的二维矩阵,每个元素是一个RGB值。

 

        # 打开图像文件,图像文件是一个RGB值组成的矩阵

        im =np.array(Image.open("beijing.jpg"));

        # (669, 1012, 3)uint8

        # 图像是一个三维数组,维度分别是高度、宽度和像素RGB值

        print(im.shape,im.dtype);

 

图像变换:

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

# -*- coding: utf-8 -*-import numpy as npfrom PIL import Imageimport os# 设置路径为当前路径path = os.path.dirname(__file__);os.chdir(path);# 打开图像文件,图像文件是一个RGB值组成的矩阵im = np.array(Image.open("beijing.jpg"));# (669, 1012, 3) uint8# 图像是一个三维数组,维度分别是高度、宽度和像素RGB值print(im.shape, im.dtype);# 图像的变换# 读入图像后,获得像素RGB值,修改后保存为新的文件a = np.array(Image.open("fcity.jpg"));# 像素值取反操作b = [255, 255, 255] - a;img1 = Image.fromarray(b.astype('uint8'));img1.save("fcity1.jpg");# convert('L')将图像的RGB值转化为一个灰度值c = np.array(Image.open("fcity.jpg").convert('L'));d = 255 - c;img2 = Image.fromarray(d.astype('uint8'));img2.save("fcity2.jpg");# 区间变换e = (100/255)*c + 150;img3 = Image.fromarray(e.astype('uint8'));img3.save("fcity3.jpg");# 像素平方f = 255*(c/255)**2;img4 = Image.fromarray(f.astype('uint8'));img4.save("fcity4.jpg");


图像手绘效果:

# -*- coding: utf-8 -*-from PIL import Imageimport numpy as npimport os# 设置路径为当前路径path = os.path.dirname(__file__);os.chdir(path);a = np.asarray(Image.open('beijing.jpg').convert('L')).astype('float')# (0-100)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.);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 轴的影响dx = np.cos(vec_el)*np.cos(vec_az);# 光源对y 轴的影响dy = np.cos(vec_el)*np.sin(vec_az);# 光源对z 轴的影响dz = np.sin(vec_el);# 光源归一化b = 255*(dx*uni_x + dy*uni_y + dz*uni_z);b = b.clip(0,255);# 重构图像im = Image.fromarray(b.astype('uint8'));im.save('beijingHD.jpg');

图片素材:

beijing.jpg


fcity.jpg