对图片的灰化或黑化处理

使图片灰化或者黑化处理

首先我们需要一个图片的数字化构造。
一个图片在电脑上就是一个三维数组,如(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()

结果如下:

以上就是所有内容了,希望大家喜欢哦,更多有趣的玩法大家自己去挖掘哦!!!

posted @ 2020-08-15 15:49  凡璞  阅读(799)  评论(0编辑  收藏  举报
1 2
3 4
5 6