You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从HTML表单获取图片后用OpenCV裁剪时读取报错求助

问题原因

cv2.imread() 仅接受本地文件路径字符串作为参数,但你传入的是Flask的FileStorage对象(即request.files['pic']返回的内容),类型不匹配导致报错。

解决方法

以下是两种可行的处理方案:

方法1:先保存文件到本地再读取

先将上传的图片保存到服务器本地目录,再通过文件路径传给cv2.imread():

from flask import Flask, request, render_template
import cv2
import os

@app.route('/update-doc', methods=['GET', 'POST'])
def updateDoc():
    if request.method == 'POST':
        profileimg = request.files['pic']
        # 确保uploads文件夹存在,不存在则创建
        os.makedirs('uploads', exist_ok=True)
        # 定义文件保存路径
        save_path = os.path.join('uploads', profileimg.filename)
        profileimg.save(save_path)
        # 通过路径读取图片
        img = cv2.imread(save_path)
        # 此处添加图片裁剪等后续操作
        # ...
    return render_template('你的模板文件名.html')

方法2:直接读取字节流(无需本地保存)

读取文件字节数据并转换为OpenCV可处理的格式,避免写入磁盘:

from flask import Flask, request, render_template
import cv2
import numpy as np

@app.route('/update-doc', methods=['GET', 'POST'])
def updateDoc():
    if request.method == 'POST':
        profileimg = request.files['pic']
        # 读取文件字节数据
        img_bytes = profileimg.read()
        # 转换为numpy数组
        img_array = np.frombuffer(img_bytes, np.uint8)
        # 解码为OpenCV格式图片
        img = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
        # 此处添加图片裁剪等后续操作
        # 示例:img_cropped = img[100:300, 200:400]
        # ...
    return render_template('你的模板文件名.html')
额外注意事项
  • 方法1中需确保uploads文件夹存在,可通过os.makedirs('uploads', exist_ok=True)自动创建。
  • 若使用方法1,建议在处理完成后清理临时文件,避免占用磁盘空间。
  • 需添加文件合法性校验(如检查文件类型、大小),防止恶意文件上传。

内容的提问来源于stack exchange,提问作者Adrian Miguel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 14:35:39