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
相关产品推荐
相关产品推荐

