【问题标题】:Adding elements of a 1D array to an Image?将一维数组的元素添加到图像?
【发布时间】:2017-09-26 04:08:00
【问题描述】:

将 numpy 导入为 np 随机导入 从 PIL 导入图片

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

I = np.array(im) #2D array of 512 by 512

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

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

【问题讨论】:

  • 那么您想将随机数添加到图像的值中吗?喜欢为每个元素添加 1 或 0?
  • 是的,这就是我想用这些添加的数字形成一个新图像
  • 为什么data数组的大小是131072?
  • 这并不重要,但是当大小为131072时,这意味着我正在将数据添加到狒狒图像中的一半像素。由于狒狒图像有 512x512 像素 = 262144 像素

标签: python arrays numpy


【解决方案1】:

好的,总体结果将是一张稍微嘈杂的图片。下面是一些示例代码:

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()

这将给出:

在这种情况下,我们必须使用 512x512x3 大小的数组,因为图像有 3 个颜色通道(R、G、B)。另请注意,我将 data 数组乘以 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()

【讨论】:

  • 问题是数据向量被请求为我列出的未修改的一维向量,然后我需要以某种方式存储数据向量元素的索引,然后将它们添加到相同的位置在狒狒图像中。并且可以在添加数据元素之前将狒狒图像更改为灰度图像。唯一可以改变的是数据向量的长度。
  • 好的,看看新的编辑。不过因为我之前写的原因,你看不出有什么区别。
  • 你真的可以使用随机样本存储数据向量元素的索引,然后将数据元素添加到babbon图像的相同索引中吗?
  • 不是真的,因为您将如何确定哪些索引是对应的?由于它们的形状和大小不同,因此没有唯一的方法是指定哪个图像像素对应于一维数组中的每个值
  • 使用种子。我需要生成一个种子,并使用该种子创建将数据元素添加到图像的位置列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 2019-07-23
  • 1970-01-01
相关资源
最近更新 更多