python图像色彩分析_Python——图像手绘效果

1、图像的RGB色彩模式

1127624-20171027211334086-107522135.png

PIL

PIL, Python Image Library

PIL库是一个具有强大图像处理能力的第三方库

在命令行下的安装方法: pip install pillow

from PIL import Image

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

1127624-20171027212743586-1927218235.png

1127624-20171028151044336-1557270321.png

from PIL import Image

import numpy as np

im=np.array(Image.open(r"C:\Users\Administrator\Desktop\timg.jpg"))

print(im.shape,im.dtype)

1127624-20171028151118430-1496738233.png

1127624-20171028195226305-549906485.png

1127624-20171028195046211-771922014.png

可以看出图像是一个三维数组,800行,1200列,每一个点分别是RGB三个值。

2、图像的变换

(1)

b=[255,255,255]-im

a=Image.fromarray(b.astype('uint8'))%生成新的图像三维数组

a.save(r"C:\Users\Administrator\Desktop\timg_2.jpg")

1127624-20171028152119570-589330827.png

(2)

模式L”为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。在PIL中,从模式“RGB”转换为“L”模式是按照下面的公式转换的:

L = R * 299/1000 + G * 587/1000+ B * 114/1000

下面我们将图像转换为“L”图像。

a=np.array(Image.open(r"C:\Users\Administrator\Desktop\timg.jpg"))

b=np.array(Image.open(r"C:\Users\Administrator\Desktop\timg.jpg").convert('L'))

c=Image.fromarray(b.astype('uint8'))

c.save(r"C:\Users\Administrator\Desktop\timg_5.jpg")

1127624-20171028201957492-735461315.png

1127624-20171028202150398-1769113585.png

RGB三个数变为了一个数。

(3)

a=np.array(Image.open(r"C:\Users\Administrator\Desktop\timg.jpg").convert('L'))%变为灰度值图片

a

Out[12]:

array([[104, 104, 104, ..., 145, 145, 145],

[104, 104, 104, ..., 145, 145, 145],

[104, 104, 104, ..., 145, 145, 145],

...,

[ 70, 78, 79, ..., 73, 65, 78],

[ 72, 79, 78, ..., 76, 49, 83],

[ 73, 71, 69, ..., 118, 76, 97]], dtype=uint8)

b=255-a

b

Out[14]:

array([[151, 151, 151, ..., 110, 110, 110],

[151, 151, 151, ..., 110, 110, 110],

[151, 151, 151, ..., 110, 110, 110],

...,

[185, 177, 176, ..., 182, 190, 177],

[183, 176, 177, ..., 179, 206, 172],

[182, 184, 186, ..., 137, 179, 158]], dtype=uint8)

im=Image.fromarray(b.astype('uint8'))

im.save(r"C:\Users\Administrator\Desktop\timg_3.jpg")

1127624-20171028190839836-170446148.png

(4)

d=255*(a/255)**2 %平方变换

im=Image.fromarray(d.astype('uint8'))

im.save(r"C:\Users\Administrator\Desktop\timg_4.jpg")

1127624-20171028191235867-1284531604.png

(5)

d=(100/255)*a+150%区间变换

im=Image.fromarray(d.astype('uint8'))

im.save(r"C:\Users\Administrator\Desktop\timg_4.jpg")

1127624-20171028191749930-1662221498.png

2、图像手绘效果分析

手绘效果的几个特征:

• 黑白灰色

• 边界线条较重

• 相同或相近色彩趋于白色

• 略有光源效果

(1)梯度重构

利用像素之间的梯度值和虚拟深度值对图像进行重构

1127624-20171028205102680-954685179.png

(2)光源效果

根据灰度变化来模拟人类视觉的远近程度

1127624-20171028205524586-703310685.png

1127624-20171028205622664-248044780.png

(3)

1127624-20171028210920508-1267530530.png

(4)

1127624-20171028210934039-991659434.png

from PIL import Image

import numpy as np

a = np.asarray(Image.open(r"C:\Users\Administrator\Desktop\timg.jpg").convert('L')).astype('float')

depth = 10.

grad = np.gradient(a) #梯度值,

grad_x, grad_y = grad

grad_x = grad_x*depth/100. #列梯度值*0.1

grad_y = grad_y*depth/100.

A = np.sqrt(grad_x**2 + grad_y**2 + 1.) #相当于grad_z=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.

dx = np.cos(vec_el)*np.cos(vec_az)

dy = np.cos(vec_el)*np.sin(vec_az)

dz = np.sin(vec_el) #长度为1,投影x,y,z长度

b = 255*(dx*uni_x + dy*uni_y + dz*uni_z)

b = b.clip(0,255)

im = Image.fromarray(b.astype('uint8'))

im.save(r"C:\Users\Administrator\Desktop\timg_6.jpg")

1127624-20171028211048539-1964729538.png

数据变化过程如下

1127624-20171028211420867-1295700392.png

1127624-20171028211445023-1352004116.png

1127624-20171028212249383-242525734.png

1127624-20171028212334523-121380678.png

1127624-20171028214031055-1501852952.png

1127624-20171028214047523-756310530.png

1127624-20171028215103305-1799053864.png

1127624-20171028215155851-2029718359.png

目的其实是将数据两级化,要么黑要么白,更好凸显手绘的感觉

x,y梯度变化越大,,则z的梯度比例越小,此时求出的变化后的灰度值越小,颜色越黑。

相反,则灰度值越大,越白,将黑白分明就显示出来了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值