33

在做作业时,我偶然发现了一个关于 Python 和图像处理的问题。我必须说,使用 Image lib 不是一种选择。所以这里

from scipy.misc import imread,imsave
from numpy import zeros

imga = zeros([100,100,3])
h = len(imga)
w = len(imga[0])

for y in range(h):
    for x in range(w):
        imga[y,x] = [255,255,255]

imsave("Result.jpg",imga)

我会假设它使我的图片变白,但它变成黑色,我不知道为什么这与代码无关(而且我知道它看起来非常难看)。它只是关于事实,它是一个黑色图像。

4

6 回答 6

69

图像中的每种颜色都由一个字节表示。所以要创建一个图像数组,你应该将它的 dtype 设置为 uint8。

而且,您不需要 for-loop 将每个元素设置为 255,您可以使用 fill() 方法或切片索引:

import numpy as np
img = np.zeros([100,100,3],dtype=np.uint8)
img.fill(255) # or img[:] = 255
于 2012-05-06T12:28:46.603 回答
8

简单的!检查以下代码:

whiteFrame = 255 * np.ones((1000,1000,3), np.uint8)

255是填充字节的颜色。

1000,1000是图像的大小。

3是图像的颜色通道。

并且unit8是类型

祝你好运

于 2019-01-29T09:16:32.183 回答
1

创建imga时,需要设置单位类型。具体来说,更改以下代码行:

imga = zeros([100,100,3], dtype=np.uint8)

并且,将以下内容添加到您的导入中:

import numpy as np

这在我的机器上给出了一个白色的图像。

于 2012-05-05T20:41:53.893 回答
0

就这个问题的标题而言,我确实需要一个白色图像以及一个枕头输入。这里提出的解决方案对我不起作用。

因此,这里有一种不同的方式来生成用于其他目的的白色图像:

from PIL import Image
img = Image.new('RGB', (200, 50), color = (255,255,255))

大小和颜色可以在 Image.new() 函数的第二个和第三个参数中更改。

如果你想在这张图片上写一些东西或保存它,这将是示例代码。

from PIL import ImageFont, ImageDraw
fnt = ImageFont.truetype("Pillow/Tests/fonts/FreeMono.ttf", 30)
ImageDraw.Draw(img).text((0,0), "hello world", font=fnt, fill=(0,0,0))
img.save('test.jpg')
于 2021-06-09T21:46:01.170 回答
0

标题太宽泛,首先出现在 Google 上。我需要一张白色图像并使用 PIL 和 numpy。PILlow 实际上适用于 numpy

import numpy as np
from PIL import Image
img = np.zeros([100,100,3],dtype=np.uint8)
img.fill(255) # numpy array!
im = Image.fromarray(img) #convert numpy array to image
im.save('whh.jpg')
于 2021-07-01T18:04:57.423 回答
-2
# Create an array with a required colours
# The colours are given in BGR [B, G, R]
# The array is created with values of ones, the size is (H, W, Channels)
# The format of the array is uint8
# This array needs to be converted to an image of type uint8

selectedColor = [75, 19, 77] * np.ones((640, 480, 3), np.uint8)
imgSelectedColor = np.uint8(np.absolute(selectedColor))
于 2020-07-19T10:45:35.357 回答