使用python从mongodb检索存储的图像

使用python从mongodb检索存储的图像,mongodb,python-3.x,pymongo,gridfs,Mongodb,Python 3.x,Pymongo,Gridfs,我将图像存储在mongo db中。现在我想按文件名从数据库中检索这些图像,并将相同文件名的图像(或像素)存储在数组或列表中。假设有两个文件名为“class1”的图像,那么它们应该在一个数组中。像前面一样创建fs变量,然后: from pymongo import MongoClient from bson.objectid import ObjectId import numpy as np import gridfs import os,os.path i=0 try: for f

我将图像存储在mongo db中。现在我想按文件名从数据库中检索这些图像,并将相同文件名的图像(或像素)存储在数组或列表中。假设有两个文件名为“class1”的图像,那么它们应该在一个数组中。

像前面一样创建
fs
变量,然后:

from pymongo import MongoClient
from bson.objectid import ObjectId
import numpy as np
import gridfs 

import os,os.path
i=0
try:
    for file in os.listdir("/Users/sarthakgupta/Desktop/sae/Images"):
        if (file.endswith(".png") | file.endswith(".jpg")):
            filename = "/Users/sarthakgupta/Desktop/sae/Images/"+file
            datafile =  open(filename,"rb")
            thedata = datafile.read()
            datafile.close()


            c = MongoClient()
            i=i+1
            db = c.trial5
            fs = gridfs.GridFS(db)
            t = "class"+str(i)


            stored = fs.put(thedata,filename=q)

except IOError:
    print("Image file %s not found" %datafile)
    raise SystemExit
您还可以查询文件列表,如:

data = fs.get_last_version(filename).read()

另外,还有一点关于代码的注释:为循环的每个迭代重新创建MongoClient和GridFS实例的速度非常慢。在开始循环之前创建它们一次,然后重新使用它们。

当我使用:“data=fs.get_last_version(filename='class3')print(data)”时,我得到的输出是:。这是什么意思?当我使用'data=fs.get_last_version(filename='class3').read()print(data)'时。我得到了这种形式的输出“b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x00\x00H\x00H\x00\x00\xff\xe1\x00XExif\x00\x00MM\x00*\x00\x00\x00\x00\x08\x00\x02\x0……”。如何使用此输出?。。感谢您的建议,“数据”是图像的字节内容。您可以将这些内容保存到一个名为“image.jpg”的文件中,或者对其执行任何操作。但是,当我尝试使用open cv显示图像时,出现了一个错误“需要类似字节的对象,而不是“GridOut”。这是我的密码。nparr=np。fromstring(data1,np.uint8)img\U np=cv2。imdecode(nparr,cv2.CV\U LOAD\U IMAGE\U COLOR)print(img\U np)
f
是一个网格对象
f.read()
是图像的内容。将
f.read()
传递给OpenCV。for循环方法仍在正则表达式上显示错误非法表达式。希望我在另一个问题中的回答可以帮助您。filename=q中的“q”是什么?我发现q应该替换为t。
from bson import Regex
for f in fs.find({'filename': Regex(r'.*\.(png|jpg)')):
    data = f.read()