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

Python采集144个chan值生成12×12 TIFF图像(指定顺序)

数据采集与TIFF图像生成需求

我正在采集数据:

ads.mode = ADS.Mode.SINGLE

chan = AnalogIn(ads, ADS.P0, ADS.P1)
 
buffer = []

buffer.append(chan.value) # I'm collecting chan values in the buffer 

当chan值的数量达到144个时,希望生成尺寸为12×12(2P=12,2Q=12,共144个像素)的.tiff图像,且chan值需按以下填充顺序写入图像:
图像填充顺序示意图

需要实现上述逻辑的Python代码帮助。


实现方案

1. 补全数据采集逻辑

先确保采集到144个有效数据点:

# 循环采集直到buffer内有144个值
while len(buffer) < 144:
    buffer.append(chan.value)

2. 按蛇形列顺序重组数组

根据示意图的填充规则,这是列优先的蛇形扫描:奇数列(从左数第1、3、5...列)从上到下填充,偶数列(第2、4、6...列)从下到上填充。用numpy数组处理更高效:

import numpy as np

# 将buffer转为numpy一维数组
data = np.array(buffer)
# 先拆分为12行12列,再转置得到12列(每列12个元素)
columns = data.reshape(12, 12).T

# 反转所有偶数索引的列(索引从0开始,对应示意图中的第2、4...列)
for col_idx in range(1, 12, 2):
    columns[col_idx] = columns[col_idx][::-1]

# 再次转置得到最终的12×12图像数组
image_array = columns.T

3. 保存为TIFF图像

可以用PIL或tifffile库完成保存,以下是两种常用方式:

方式一:使用PIL库

from PIL import Image

# 根据采集数据的实际类型调整(比如uint16,若数据是浮点型可转成uint8或float32)
img = Image.fromarray(image_array.astype(np.uint16))
img.save('output_12x12.tiff')

方式二:使用tifffile库

import tifffile

# 支持更多TIFF格式参数,适合科学图像场景
tifffile.imwrite('output_12x12.tiff', image_array)

完整整合代码

# 需根据实际使用的ADS库调整导入语句
from ADS1115 import ADS1115
from PIL import Image
import numpy as np

# 初始化硬件
ads = ADS1115()
ads.mode = ADS.Mode.SINGLE
chan = ADS1115.AnalogIn(ads, ADS1115.P0, ADS1115.P1)

buffer = []

# 采集144个数据点
while len(buffer) < 144:
    buffer.append(chan.value)

# 按指定顺序重组为图像数组
data = np.array(buffer)
columns = data.reshape(12, 12).T
for col_idx in range(1, 12, 2):
    columns[col_idx] = columns[col_idx][::-1]
image_array = columns.T

# 保存TIFF图像
img = Image.fromarray(image_array.astype(np.uint16))
img.save('12x12_scan_result.tiff')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 03:42:51