Python图像行重排处理及LED灯带显示代码开发求助
图像行重排适配LED灯带的Python代码补全与指导
需求说明:需要将图像进行行重排后用于LED灯带显示,规则如下:
- 前半行:取原图像的奇数行(以1为起始计数,比如总高度为10时,原行[1,2,3,4,5]转为[1,3,5,7,9])
- 后半行:取原图像的偶数行并倒序(总高度为10时,原行[6,7,8,9,10]转为[10,8,6,4,2])
- 列保持不变,仅调整每行的像素顺序
以下是补全后的完整代码,关键修改部分已标注:
from PIL import Image import adafruit_dotstar as dotstar import board # 需要导入board库指定硬件引脚 NUMPIXELS = 10 # LED灯带长度 FILENAME = "image.png" # 待加载的图像文件 # 加载图像并获取尺寸 IMG = Image.open(FILENAME).convert("RGB") PIXELS = IMG.load() WIDTH = IMG.size[0] HEIGHT = IMG.size[1] # 确保图像高度不超过灯带长度 HEIGHT = min(HEIGHT, NUMPIXELS) ###################################################### # 行重排核心逻辑(补全部分) pixelMap = IMG.load() img = Image.new(IMG.mode, (WIDTH, HEIGHT)) # 新图像高度与处理后一致 pixelsNew = img.load() # 计算前后半段的行分界 half_height = HEIGHT // 2 for x in range(WIDTH): # 遍历每一列 # 处理前半段:取奇数索引行(对应原1、3、5...行) for new_y in range(half_height): original_y = new_y * 2 # 从0开始,0对应原行1,2对应原行3 if original_y < HEIGHT: pixelsNew[x, new_y] = pixelMap[x, original_y] # 处理后半段:取偶数索引行并倒序(对应原10、8、6...行) for new_y in range(half_height, HEIGHT): # 计算对应原行索引:从最后一个偶数行倒序取 original_y = HEIGHT - 1 - (new_y - half_height) * 2 if original_y >= 0: pixelsNew[x, new_y] = pixelMap[x, original_y] ####################################################### img.show() # 预览重排后的图像 # 初始化LED灯带(原代码缺失部分) DOTS = dotstar.DotStar(board.SCK, board.MOSI, NUMPIXELS, brightness=0.2) # 分配列数据列表:[列数 x 行数],每个元素存储RGB+亮度 COLUMN = [[] for _ in range(WIDTH)] for x in range(WIDTH): COLUMN[x] = [[0, 0, 0, 1.0] for _ in range(HEIGHT)] # 默认亮度1.0 # 将重排后的图像像素填充到列列表中 for x in range(WIDTH): # 遍历每一列 for y in range(HEIGHT): # 遍历每一行 value = pixelsNew[x, y] # 使用重排后的图像像素 COLUMN[x][y][0] = value[0] # R COLUMN[x][y][1] = value[1] # G COLUMN[x][y][2] = value[2] # B # 循环显示每一列的像素到LED灯带 while True: for x in range(WIDTH): # 依次显示每一列 DOTS[0:NUMPIXELS] = COLUMN[x] DOTS.show()
关键部分说明
行重排逻辑
- 先将图像高度均分为前后两半,
half_height = HEIGHT // 2 - 前半段:新行索引
new_y对应原行索引new_y * 2,实现取奇数行(1、3、5...) - 后半段:新行索引从
half_height开始,对应原行索引HEIGHT - 1 - (new_y - half_height)*2,实现从最后一个偶数行倒序取(10、8、6...)
- 先将图像高度均分为前后两半,
LED灯带初始化
- 原代码缺失灯带初始化步骤,需添加
DOTS = dotstar.DotStar(board.SCK, board.MOSI, NUMPIXELS, brightness=0.2),引脚可根据硬件实际连接调整
- 原代码缺失灯带初始化步骤,需添加
像素数据适配
- 填充
COLUMN列表时,需使用重排后的图像像素(pixelsNew),而非原图像像素 - 每个灯带像素格式为
[R, G, B, 亮度],亮度范围0.0-1.0
- 填充
内容的提问来源于stack exchange,提问作者Stanlej
相关产品推荐
相关产品推荐

