【问题标题】:Can an uploaded image be loaded directly by cv2?上传的图片可以直接用cv2加载吗?
【发布时间】:2015-02-15 12:50:17
【问题描述】:

我在内存中有一个上传的文件。我想用 cv2 操作文件。目前,我将文件写入磁盘,然后使用 cv2 读取它。如何跳过写入文件并直接使用 cv2 加载?

file = request.files['file']
# if file and allowed_file(file.filename):

# save file            
filename = secure_filename(file.filename)
file_path = os.path.join(dressrank.config['SHOW_IMG_FOLDER'], filename);
file.save(file_path)
img_path = file_path

# COLOR FATURE EXTRACTION
img = read_img(img_path)
img =img_resize(img, 500)

【问题讨论】:

    标签: python opencv flask


    【解决方案1】:

    使用上传的数据构建一个 numpy 数组。使用 cv2 解码此数组。

    img = cv2.imdecode(numpy.fromstring(request.files['file'].read(), numpy.uint8), cv2.IMREAD_UNCHANGED)
    

    Prior to OpenCV 3.0, use cv2.CV_LOAD_IMAGE_UNCHANGED instead.


    另见:Python OpenCV load image from byte string

    【讨论】:

      【解决方案2】:

      如果使用 BaseHTTPRequestHandler,首先应该创建一个FieldStorage 表单:

      fm = cgi.FieldStorage(fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD':'POST'})
      

      然后:

      if "file" in fm:            
          image = cv2.imdecode(np.frombuffer(fm['file'].file.read(), np.uint8), cv2.IMREAD_UNCHANGED)
      

      另外,请注意 fromstring 已被弃用,这就是为什么我用 frombuffer 更新大卫主义的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-26
        • 1970-01-01
        • 2015-01-19
        • 1970-01-01
        相关资源
        最近更新 更多