示例#1
0
FeatureInfo extractAllPoints(const QString& fname, OGRCoordinateTransformation *trans)
{
    FeatureInfo ret = FeatureInfo();

    DataSourcePtr ds(OGRSFDriverRegistrar::Open(fname.toLocal8Bit(), false));
    if (ds == nullptr)
    {
        qWarning() << "Error opening file:" << fname;
    }
    else
    {
        size_t verts, objs;
        auto layer = ds->GetLayer(0);
        layer->ResetReading();
        std::tie(verts, objs) = countGeometry(layer);
        qDebug() << "Points:" << verts << "Objects:" << objs;

        // Initialize the info
        ret.verts.reserve(verts);
        ret.starts.reserve(objs);
        ret.counts.reserve(objs);

        layer->ResetReading();
        extractGeometry(layer, trans, ret);
    }

    return ret;
}
示例#2
0
int BundlerMatcher::extractSiftFeature(int fileIndex)
{
    std::stringstream filepath;
    filepath << mInputPath << mFilenames[fileIndex];

    std::string tmp = filepath.str();
    char* filename = &tmp[0];
    bool extracted = true;

    unsigned int imgId = 0;
    ilGenImages(1, &imgId);
    ilBindImage(imgId);
    int nbFeatureFound = -1;

    if(ilLoadImage(filename))
    {
        int w = ilGetInteger(IL_IMAGE_WIDTH);
        int h = ilGetInteger(IL_IMAGE_HEIGHT);
        int format = ilGetInteger(IL_IMAGE_FORMAT);

        if (mSift->RunSIFT(w, h, ilGetData(), format, GL_UNSIGNED_BYTE))
        {
            int num = mSift->GetFeatureNum();

            SiftKeyDescriptors descriptors(128*num);
            SiftKeyPoints keys(num);

            mSift->GetFeatureVector(&keys[0], &descriptors[0]);

            //Save Feature in RAM
            mFeatureInfos.push_back(FeatureInfo(w, h, keys, descriptors));

            nbFeatureFound = num;
        }
        else
        {
            extracted = false;
        }
    }
    else
    {
        extracted = false;
    }

    ilDeleteImages(1, &imgId);

    if (!extracted)
    {
        std::cout << "Error while reading : " <<filename <<std::endl;
    }

    return nbFeatureFound;
}