import matplotlib.pyplot as plt
from astropy.io import fits
def openfit(b):
hdu_list = fits.open(b)
hdu_list.info()
image_data = hdu_list[0].data
plt.imshow(image_data, cmap='gray')
plt.colorbar()
plt.show()
openfit(r"C:\Users\kapla_000\Desktop\barkin\bilgisayar\goruntu\HorseHead.fits")
我使用这段代码打开并显示我从(http://www.astropy.org/astropy-tutorials/FITS-images.html)
获取的HorseHead图像openfit(r"C:\Users\kapla_000\Desktop\barkin\bilgisayar\goruntu\NGC2392_CXO.fits")
当我尝试使用相同的代码打开NGC2392_CXO(http://people.sabanciuniv.edu/ersing/proj102/)
我在网上得到错误:" plt.imshow(image_data,cmap =' grey')"
plt.imshow(image_data, cmap='gray')
File "C:\Users\kapla_000\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 3022, in imshow
**kwargs)
File "C:\Users\kapla_000\Anaconda3\lib\site-packages\matplotlib\__init__.py", line 1811, in inner
return func(ax, *args, **kwargs)
File "C:\Users\kapla_000\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py", line 4947, in imshow
im.set_data(X)
File "C:\Users\kapla_000\Anaconda3\lib\site-packages\matplotlib\image.py", line 449, in set_data
raise TypeError("Image data can not convert to float")
TypeError: Image data can not convert to float
我认为问题在于图像文件的尺寸。 该行" hdu_list.info()"给出了图像拟合文件的属性。对于HorseHead,它给出了
Filename:
C:\Users\kapla_000\Desktop\barkin\bilgisayar\goruntu\HorseHead.fits
No. Name Type Cards Dimensions Format
0 PRIMARY PrimaryHDU 161 (891, 893) int16
1 er.mask TableHDU 25 1600R x 4C [F6.2, F6.2, F6.2, F6.2]
对于NGC2392_CXO,同一行给出了
Filename:
C:\Users\kapla_000\Desktop\barkin\bilgisayar\goruntu\NGC2392_CXO.fits
No. Name Type Cards Dimensions Format
0 PRIMARY PrimaryHDU 32 ()
1 EVENTS BinTableHDU 884 238647R x 19C [1D, 1I, 1I, 1J, 1I,
1I, 1I, 1I, 1E, 1E, 1E, 1E, 1J, 1J, 1E, 1J, 1I, 1I, 32X]
2 GTI BinTableHDU 28 1R x 2C [1D, 1D]
在HorseHead列表的第0个索引中,它具有整数维度,其中NGC2392_CXO没有维度。我似乎无法理清如何查看NGC2392_CXO
答案 0 :(得分:2)
就技术而言,您尝试打开的文件不包含图像,就FITS格式而言。主HDU没有数据,另外两个HDU是表,而不是图像。某些约定可能会将图像存储在表中,但在这种情况下列结构看起来不像它,尽管查看列名称可以提供一些见解。
但总的来说,如果你想用Python显示FITS图像,如果你至少从aplpy开始,你通常会得到最直接,最轻松的结果。但对于这个特定的文件,我不确定你在期待什么。