Ik heb nog nooit op een forumvraag gereageerd, maar ik heb vooral veel baat gehad bij stackoverflow, dus ik dacht dat ik minstens één keer iets terug moest geven. Aangezien het bovenstaande probleem me nu bijna twee dagen dwarszat en ik eindelijk een oplossing vond, dacht ik dat dit een goed onderwerp zou zijn om iets terug te geven aan de gemeenschap.
Ik had hetzelfde probleem met het ophalen van een afbeelding (.png) van een MongoDB/GridFS met het Java-stuurprogramma. Eerst, zoals ook hierboven beschreven, moet u het bestand Java-object ophalen:
import com.mongodb.*;
import com.mongodb.gridfs.*;
mongoClient = MongoClient('server_name',27017);
db = mongoClient.getDB('database_name');
imgData = GridFS(db,'image_data');
Het bovenstaande codegedeelte krijgt de verzameling met de afbeeldingsgegevens. Daarna kan het Java-object met afbeeldingsgegevens worden opgehaald:
javaIObj = imgData.findOne('image_name.png');
Nu is ByteArrayOutputStream nodig waar de gegevensstroom kan worden doorgesluisd in plaats van een bestand:
import java.io.ByteArrayOutputStream;
baos = ByteArrayOutputStream();
javaIObj.writeTo(baos);
De uitvoerstroom moet opnieuw worden doorgesluisd naar een ByteArrayInputStream die kan worden gebruikt om een ImageIO-object te construeren:
import java.io.ByteArrayInputStream;
import javax.imageio.ImageIO;
bais = ByteArrayInputStream(baos.toByteArray());
jbi = ImageIO.read(bais);
Nu kan het werkelijke Matlab-beeld als matrix worden opgehaald en weergegeven:
nrows = jbi.getHeight; ncols = jbi.getWidth;
data = jbi.getData.getPixels(0,0,ncols,nrows,[]);
matImg = reshape(data,ncols,nrows)';
imagesc(matImg);
Ik weet niet of dit de perfecte oplossing is, maar het werkte voor mij.
Proost!