我想更改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")
答案 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的黑色图片开头:
#!/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")
您可以合并前两行以简化如下操作:
# Load the image from disk and make into numpy array
na = np.array(Image.open("image.pgm"))