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

使用pyfits读取FITS文件时出现CompImageHDU错误求助

解决FITS文件读取hdu[1].data报错问题

结合你描述的现象(DS9可正常查看图像、hdu[1].compressed_data能获取数组但生成图像异常)及错误截图显示的解压类错误,给出以下解决方案:

1. 手动转换compressed_data为标准数组

compressed_data返回的可能是压缩格式的特殊数组对象,需转换为numpy数组才能正常用于图像生成:

import numpy as np
from astropy.io import fits
import matplotlib.pyplot as plt

# 读取FITS文件
hdul = fits.open("你的FITS文件路径.fits")
# 转换压缩数据为标准numpy数组
img_data = np.asarray(hdul[1].compressed_data)
# 验证数据状态
print(f"数据形状:{img_data.shape},数据类型:{img_data.dtype}")
# 生成图像
plt.imshow(img_data, cmap="gray", origin="lower")
plt.colorbar()
plt.show()

2. 修复astropy的解压依赖

报错大概率是astropy依赖的cfitsio库未正确安装或版本不兼容,执行以下步骤:

  • 更新astropy到最新版本:
    pip install --upgrade astropy
    
  • 安装系统级cfitsio依赖:
    # Ubuntu/Debian系统
    sudo apt-get install libcfitsio-dev
    # macOS(需先安装Homebrew)
    brew install cfitsio
    # Conda环境
    conda install -c conda-forge cfitsio astropy
    

3. 导出未压缩FITS文件测试

如果上述方法无效,用DS9打开原文件后,选择File > Save As,保存时勾选未压缩选项生成新FITS文件,再用代码读取新文件的hdu[1].data,验证是否是原文件的压缩格式损坏导致的问题。

4. 尝试用替代库读取

如果是自定义压缩格式导致astropy无法处理,可尝试用fitsio库读取:

pip install fitsio
import fitsio
import matplotlib.pyplot as plt

# 直接读取指定扩展的图像数据
data = fitsio.read("你的FITS文件路径.fits", ext=1)
plt.imshow(data, cmap="gray")
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:12:18