sql >> Databáze >  >> NoSQL >> MongoDB

Čtení dat z MongoDB (gridfs) přes Matlab a ovladač Java

Nikdy jsem neodpověděl na žádnou otázku na fóru, ale hodně jsem těžil zejména ze stackoverflow, takže jsem si řekl, že musím alespoň jednou něco vrátit. Protože mě výše uvedený problém trápil už téměř dva dny a nakonec jsem dal dohromady řešení, myslel jsem si, že by to bylo dobré téma, jak komunitě něco vrátit.

Měl jsem stejný problém s načtením obrázku (.png) z MongoDB/GridFS s ovladačem Java. Nejprve, jak je také popsáno výše, musíte načíst soubor Java object:

    import com.mongodb.*;
    import com.mongodb.gridfs.*;

    mongoClient = MongoClient('server_name',27017);
    db = mongoClient.getDB('database_name');
    imgData = GridFS(db,'image_data');

Výše uvedená část kódu získává kolekci s daty obrázku. Poté lze získat obrazová data Java objektu:

    javaIObj = imgData.findOne('image_name.png');

Nyní je potřeba ByteArrayOutputStream, kam lze datový proud nasměrovat pomocí kanálu namísto souboru:

    import java.io.ByteArrayOutputStream;

    baos = ByteArrayOutputStream();
    javaIObj.writeTo(baos);

Výstupní proud musí být znovu převeden do ByteArrayInputStream, který lze použít k vytvoření objektu ImageIO:

    import java.io.ByteArrayInputStream;
    import javax.imageio.ImageIO;    

    bais = ByteArrayInputStream(baos.toByteArray());
    jbi = ImageIO.read(bais);

Nyní lze načíst a zobrazit skutečný obraz Matlabu jako matici:

    nrows = jbi.getHeight; ncols = jbi.getWidth;
    data = jbi.getData.getPixels(0,0,ncols,nrows,[]);
    matImg = reshape(data,ncols,nrows)';

    imagesc(matImg);

Nevím, jestli je to dokonalé řešení, ale pro mě to fungovalo.

Na zdraví!




  1. Jak připojím výsledky agregace Mongo DB k existující kolekci?

  2. mongodb jak se dotazovat na řetězec součtu?

  3. Mongoose se nemůže připojit bez internetu

  4. MongoDB uvádí databáze s danou předponou v Go