Python为图片叠加网格时修改为橙色出现广播错误如何解决
网格颜色修改解决方案
报错原因
- 你读取的图片为RGBA四通道格式(数组最后一维长度为4,对应红、绿、蓝、透明度4个属性),你之前定义的橙色
(255,165,0)是三通道RGB值,通道数量不匹配导致数组广播失败。 - 额外注意:
pylab.imread读取png等格式图片时,输出数组值范围通常为0-1的浮点数,直接使用0-255的整数赋值会出现颜色偏差。
修改方案
直接适配图片的通道数和数值范围定义橙色即可,修改后的完整代码如下:
import matplotlib.pyplot as plt from PIL import Image import pylab as pl img = Image.open('PATH_TO_IMAGE') im = pl.imread('PATH_TO_IMAGE') width, height = img.size newh = height/2 neww = width/2 print(newh) print(neww) dx, dy = int(newh/30), int(neww/55) print(dx) print(dy) # 自动适配图片值范围定义RGBA格式橙色 if im.max() <= 1.0: # 适配0-1浮点范围,最后一位1代表完全不透明 grid_color = (1.0, 165/255, 0.0, 1.0) else: # 适配0-255整数范围,最后一位255代表完全不透明 grid_color = (255, 165, 0, 255) # 赋值网格颜色 im[:,::dy,:] = grid_color im[::dx,:,:] = grid_color # 展示结果 plt.imshow(im, extent =[0,110,0,60] ) plt.show()
可选优化
如果你不需要保留图片的透明度属性,也可以在读取图片后将其转为三通道RGB格式,之后直接使用三通道RGB值赋值也不会报错,转通道代码如下:
# 截取前三个通道,丢弃透明度通道 im = im[...,:3]
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

