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

如何用Python结合1D LUT将树莓派相机JPG转为伪彩色图?

解决自定义LUT伪彩色映射偏色问题(Pillow+Numpy高效方案)

你的代码输出偏蓝是因为错误地将LUT拆分为RGB三通道独立映射,而非把单灰度值直接对应到LUT的完整RGB像素组。以下是适配树莓派性能的修正方案:

问题根源

原代码的核心逻辑错误:

  1. 将灰度图转成RGB后,三通道像素值完全一致
  2. 使用image.point(lut)时,flatten后的LUT会被拆分:前256个值给R通道、中间256个给G通道、最后256个给B通道,这和你需要的「单灰度值对应一组RGB」逻辑完全不符

修正后的代码

from PIL import Image
import numpy as np

# 1. 读取原图并转为单通道灰度图
gray_img = Image.open('testbild.jpg').convert('L')
gray_np = np.array(gray_img)

# 2. 读取并处理LUT:提取256x1 PNG中每个位置的RGB值
lut_img = Image.open('LUT.png').convert('RGB')
# 转为(256, 3)的数组,每个元素对应灰度0-255的RGB颜色
lut_np = np.array(lut_img).squeeze()  # 移除多余维度,从(256,1,3)转为(256,3)

# 3. 灰度值批量映射到LUT颜色:直接用灰度值作为索引取对应RGB
color_np = lut_np[gray_np]

# 4. 转回PIL Image并保存
color_img = Image.fromarray(color_np.astype(np.uint8))
color_img.save('output.jpg')

关键优势

  • 高效快速:用Numpy索引完成批量映射,比Matplotlib色图处理快数倍,适配树莓派的资源限制
  • 逻辑准确:完全匹配Photoshop导出的256x1水平LUT规则(最左像素对应最暗灰度值)
  • 精简操作:无需将灰度图转成RGB,直接用单通道做索引,节省内存与计算量

验证提示

  • 确保LUT的PNG无alpha通道,所以用convert('RGB')读取
  • 如果LUT是垂直排列,需调整顺序:lut_np = lut_np[::-1].squeeze()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:35:52