You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

关键部分说明

  1. 行重排逻辑

    • 先将图像高度均分为前后两半,half_height = HEIGHT // 2
    • 前半段:新行索引new_y对应原行索引new_y * 2,实现取奇数行(1、3、5...)
    • 后半段:新行索引从half_height开始,对应原行索引HEIGHT - 1 - (new_y - half_height)*2,实现从最后一个偶数行倒序取(10、8、6...)
  2. LED灯带初始化

    • 原代码缺失灯带初始化步骤,需添加DOTS = dotstar.DotStar(board.SCK, board.MOSI, NUMPIXELS, brightness=0.2),引脚可根据硬件实际连接调整
  3. 像素数据适配

    • 填充COLUMN列表时,需使用重排后的图像像素(pixelsNew),而非原图像像素
    • 每个灯带像素格式为[R, G, B, 亮度],亮度范围0.0-1.0

内容的提问来源于stack exchange,提问作者Stanlej

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:40:44