我正在尝试使用C ++读取和写入FITS图像。我正在尝试使用CCfits,但无法弄清楚如何获取像素缓冲区。我已使用文档中的示例代码成功读取了图像并打印出了主标头,但是当我尝试读取二进制数据数组时出现错误。这是CCfits示例中提供的代码(我已指出错误所在)。
int readImage()
{
std::auto_ptr<FITS> pInfile(new FITS("atestfil.fit",Read,true));
PHDU& image = pInfile->pHDU();
std::valarray<unsigned long> contents;
// read all user-specifed, coordinate, and checksum keys in the image
image.readAllKeys();
image.read(contents); // !!!ERROR HERE!!!
// this doesn’t print the data, just header info.
std::cout << image << std::endl;
long ax1(image.axis(0));
long ax2(image.axis(1));
for (long j = 0; j < ax2; j+=10)
{
std::ostream_iterator<short> c(std::cout,"\t");
std::copy(&contents[j*ax1], &contents[(j+1)*ax1-1], c);
std::cout << '\n';
{
std::cout << std::endl;
return 0;
}
从make返回的错误是:
undefined reference to `void CCfits::PHDU::read<unsigned long>(std::valarray<unsigned long>&)'
确实,根据我与源代码一起下载的文档,该签名没有任何功能。因此,我尝试了所有其他已记录的签名,但是仍然遇到基本相同的错误(只是提到了不同的签名)。
实际上,我打开了PHDU.h的本地副本,并发现以下行:
template<typename S>
void read(std::valarray<S>& image) ;
我包含了
-lcfitsio -lCCfits
,如果用read()函数注释掉该行,则代码可以很好地构建。有谁知道如何使用该库?
有人有可行的例子吗?
最佳答案
看来CCfits并不能像宣传中那样正常工作。 read()函数已记录在文档中,甚至在头文件中声明,但没有实现。
只需使用cfitsio,它就可以工作。
关于c++ - 如何从CCfits获取图像数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49723490/