对图片的灰化或黑化处理
使图片灰化或者黑化处理
首先我们需要一个图片的数字化构造。
一个图片在电脑上就是一个三维数组,如(360, 360, 3),前两个维度代表的是图片的像素大小,这张图片即360x360的大小,而第三个维度涉及的是颜色。
众所周知,我们现在常用的色彩模式就是RGB,即三原色模式,由三个[0, 255]之间的数字组成,比如红色就是[255, 0, 0],绿色就是[0, 255, 0],蓝色就是[0, 0, 255],其他的颜色也可以由改变数字得到。我们暂且把列表的三个值分别叫做[red, green, blue]
现在回到三维数组,(i, j)代表的是x=i,y=j的像素点,而(i, j, 0)即代表(i, j)这个像素点的三原色中第一个数字的数值,同理(i, j ,1)和(i, j, 2)则代表三原色中的第二个和第三个数字,所以[(i, j, 0), (i, j, 1), (i, j, 1)]则代表的是i, j这个点的颜色。
明白了图片的构造,我们就可以开始进行我们想要的灰化或者黑化的操作了。
Turn the image into a grayscale image.
最简单的一个方法,就是让所有像素点的(red, green, blue)等于(a, a, a),而a等于(red + green + blue)/ 3。
我们不妨用代码试一试:
最首先的图片长这样:
import matplotlib.pyplot as plt
from scipy import misc
import numpy as np
f = misc.face() # 获取一张图片的数组给f
a = np.array(f) # 复制f
b = np.array(f)
# convert to grayscale
# 先将所有像素的三原色的red区改成平均值,再给green和blue赋值
b[:, :, 0] = (a[:, :, 0] + a[:, :, 1] + a[:, :, 2])/3
b[:, :, 1] = b[:, :, 0]
b[:, :, 2] = b[:, :, 0]
plt.imshow(b)
plt.show()
我们处理后的结果为:
blacken
而黑化更简单,就是把所有的RGB设置为0即可
为了体现我们黑化的效果,我们可以对图片进行一些别样的处理,我们把再图片中心圆外的部分进行黑化,而中心圆的部分进行保留
代码如下:
import matplotlib.pyplot as plt
from scipy import misc
import numpy as np
f = misc.face()
a = np.array(f)
# 获取图片的三维
dimensions = a.shape
# 中心点
centerX = dimensions[0]/2
centerY = dimensions[1]/2
# 图片中心圆的半径(这个自己设定也可)
radius = min(centerX, centerY)
# 对在中心圆外的像素点进行黑化
for i in range(dimensions[0]):
for j in range(dimensions[1]):
if (i-centerX)**2 + (j-centerY)**2 > radius**2:
a[i, j, :] = 0
plt.imshow(a)
plt.show()
结果如下:
以上就是所有内容了,希望大家喜欢哦,更多有趣的玩法大家自己去挖掘哦!!!