尝试在图像中绘制正方形时遭遇ValueError广播错误求助
问题修复:图像绘制正方形时的ValueError错误
错误原因
你代码里的img[90:200, 90:200, 1:2]选取的是单通道(索引1到2是左闭右开区间,实际只取第2个通道,对应RGB的绿色通道),但赋值的[0,255,0]是3个元素的数组,形状(3,)和目标区域的形状(110,110,1)不匹配,导致广播失败报错。
修复方案
根据你的需求(绘制绿色正方形),有两种正确的写法:
方案1:给正方形区域设置完整RGB绿色
修改通道切片为:(表示所有3个RGB通道),直接赋值绿色的RGB值:
from skimage import io import numpy as np from matplotlib import pyplot as plt img = io.imread("imagem.jpg") # 可选:查看图像形状,确认是RGB图(形状为(高度, 宽度, 3)) print("图像形状:", img.shape) # 给90-200行、90-200列的区域设置绿色(RGB: 0,255,0) img[90:200, 90:200, :] = [0, 255, 0] plt.imshow(img) plt.show()
方案2:仅修改绿色通道(如果只需要调整单通道)
如果只是想把正方形区域的绿色通道拉满(偏绿色),只需要给单通道赋值单个数值:
# 仅将正方形区域的绿色通道(索引1)设为255 img[90:200, 90:200, 1] = 255
额外说明
- 图像切片规则:
img[行范围, 列范围, 通道范围],所有区间都是左闭右开,比如90:200会选取从第90到第199的像素,共110个像素长度。 - 如果后续使用
img_as_float将图像转为浮点型(0-1范围),赋值时要对应改为[0, 1, 0]这类浮点数值。
内容的提问来源于stack exchange,提问作者Julia Rodrigues Marques do Nas
相关产品推荐
相关产品推荐

