将1D数组的元素添加到图像中?

时间:2017-04-28 06:28:55

标签: python arrays numpy

将numpy导入为np 随机导入 来自PIL导入图像

im = Image.open(' baboon.png')

I = np.array(im)#2D数组512×512

data = np.random.randint(2,size = 131072)#1D array

我有一个512 x 512的图像,我想在512 x 512图像中随机添加132072次1或0的数据元素。如何使用原始图像+添加的数据元素形成新图像?

1 个答案:

答案 0 :(得分:0)

好吧,一般的结果是吵闹的画面。以下是一些示例代码:

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

im = Image.open('baboon.png')

l = np.array(im)

data = 50*np.random.randint(2, size=(512,512,3))

l_new = (l+data).astype(np.uint8)

fig, ax = plt.subplots(1,2)
ax[0].imshow(l)
ax[1].imshow(l_new)
fig.show()

哪个会给: enter image description here

在这种情况下,我们必须使用512x512x3大小的阵列,因为图像有3个颜色通道(R,G,B)。另请注意,我将数据数组乘以50,因为每个颜色通道为8位(即值从0到255),因此添加1不会产生太大的可见差异,而加50会。

这有帮助吗?

编辑:

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

# Load image, convert to greyscale
im = Image.open('baboon.png').convert('L')

l = np.array(im)

data = np.random.randint(2, size=131072)

# To add we need to pad data so it contains the same number of elements
padSize = (l.shape[0]*l.shape[1])-data.shape[0]
data_new = np.pad(data, (0,padSize), mode='constant')

# Now we reshape data
data_reshaped = data_new.reshape((512,512))

l_new = l+data_reshaped

fig, ax = plt.subplots(1,2)
ax[0].imshow(l, cmap=plt.cm.Greys)
ax[1].imshow(l_new,cmap=plt.cm.Greys)
fig.show()

enter image description here