我正在尝试使用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/

10-10 03:25