为什么PIL中出现“ ValueError:图像为只读”

时间:2018-08-18 13:04:14

标签: python-2.7 ubuntu-16.04 python-imaging-library pixels

我想更改pgm灰度图像中的像素。当我编译以下代码时,它显示图像是只读的。我无法更改image的像素。如何解决此错误?
这是我的代码:

from PIL import Image
img = Image.open('Image.pgm')
pixval= img.load()
columnsize, rowsize = img.size 

img1 = Image.open('Image.pgm')
pix1 = img1.load()
for i in range(rowsize):
    for j in range(columnsize):
        pix1[j,i]=250
img1.save("share1.pgm")

2 个答案:

答案 0 :(得分:1)

要更改像素,请使用以下API

image.putpixel((j, i), 250)

尤其是,您的代码变为

from PIL import Image
img = Image.open('Image.pgm')
pixval = img.load()
columnsize, rowsize = img.size 
for i in range(rowsize):
    for j in range(columnsize):
        image.putpixel((j, i), 250)
img1.save("share1.pgm")

答案 1 :(得分:1)

您似乎想使用“数组符号” 来访问像素,因此您可能会发现将图像转换为numpy数组并在此处进行修改更直观,更快捷。

因此,如果我以这张320x240的黑色图片开头:

enter image description here

#!/usr/local/bin/python3
import numpy as np
from PIL import Image

# Load the image from disk
im = Image.open("image.pgm")

# Convert image to numpy array
na = np.array(im)

# Make entire image grey (128)
na[:,:] = 128

# Make pixel 1,1 white (255)
na[1,1] = 255

# Make rows 20-30 white (255)
na[20:30,:] = 255

# Make columns 80-100 black (0)
na[:,80:100] = 0

# Convert numpy array back to image and save
Image.fromarray(na).save("result.png")

enter image description here


您可以合并前两行以简化如下操作:

# Load the image from disk and make into numpy array
na = np.array(Image.open("image.pgm"))