将X轴每隔第2个元素、Y轴每隔第3个元素改为黑色的代码调试求助
问题分析与解决
你的代码未生效是因为存在几个关键错误,逐个拆解:
变量未定义+操作顺序完全颠倒
- 你直接调用
picture.resize,但picture变量根本没定义,运行时会直接报错 - 你先把未修改的原始图像保存成
result.png,之后才对数组im做修改,导致保存的是原图 - 最后显示的是未处理的
picture_resized,不是你修改后的图像
- 你直接调用
索引逻辑不符合需求
你要实现的是X轴(列方向)每隔第2个元素、Y轴(行方向)每隔第3个元素改为黑色,但原代码里im[0::2,0::2]是行和列都隔2个选取,im[0::3,0::3]是行和列都隔3个选取,完全不符合需求。正确的索引应该是行按0::3(每隔3行取一行)、列按0::2(每隔2列取一列)来定位目标像素。
修正后的代码:
from PIL import Image import numpy as np import matplotlib.pyplot as plt # 加载图像并调整为500×500尺寸 picture = Image.open('Lenna.png').convert('RGB') picture_resized = picture.resize((500, 500)) # 将图像转为numpy数组以便操作 im = np.array(picture_resized) # 按需求修改像素:Y轴每隔第3个元素(行0、3、6...),X轴每隔第2个元素(列0、2、4...)设为黑色 im[0::3, 0::2] = [0, 0, 0] # 保存修改后的图像 Image.fromarray(im).save('result.png') # 显示修改后的图像 %matplotlib notebook plt.imshow(im) plt.show()
关键修正说明:
- 先定义
picture变量,加载图像后再执行尺寸调整 - 将数组修改操作放在保存图像之前,确保保存的是处理后的结果
- 调整索引逻辑匹配需求,精准定位要改成黑色的像素
- 最后显示修改后的
im数组,而非原始的未处理图像
内容的提问来源于stack exchange,提问作者mahmut
相关产品推荐
相关产品推荐

