【问题标题】:Retrieve stored image from mongodb using python使用python从mongodb检索存储的图像
【发布时间】:2017-07-05 17:23:19
【问题描述】:
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

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

【问题讨论】:

标签: mongodb python-3.x pymongo gridfs


【解决方案1】:

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

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

您还可以查询文件列表,例如:

from bson import Regex
for f in fs.find({'filename': Regex(r'.*\.(png|jpg)')):
    data = f.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\x01\x00\x00H\x00H\x00\x00\xff\xe1\x00XExif\x00\x00MM\x00*\x00 \x00\x00\x08\x00\x02\x0……”这种形式。我如何使用此输出?.. 感谢您的建议
  • "data" 是图像的字节内容。你可以将这些内容保存到一个名为“image.jpg”的文件中,或者对它们做任何你想做的事情。
  • 但是当我尝试使用 open cv 显示图像时,我得到一个错误“a bytes-like object is required, not 'GridOut'”。这是我的代码。 nparr = np.fromstring(data1, np.uint8) img_np = cv2.imdecode(nparr, cv2.CV_LOAD_IMAGE_COLOR) print(img_np)
  • f 是一个 GridOut 对象。 f.read() 是图像的内容。将f.read() 传递给 OpenCV。
  • for循环方法在Regex上仍然显示错误非法表达式。
猜你喜欢
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 2014-02-25
  • 2020-10-23
相关资源
最近更新 更多