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

Flask接收表单上传图片并使用OpenCV读取裁剪的方法

解决Flask上传图片后用OpenCV读取并裁剪的问题

你的代码里犯了个常见错误:cv2.imread()只能接收文件路径字符串,但request.files['pic']返回的是Flask的FileStorage对象,直接传进去肯定读不出图片。下面是正确的实现方法:

核心思路

  1. 先拿到上传的文件对象,确认文件存在
  2. 把文件的字节内容转成numpy数组(OpenCV基于numpy处理图像)
  3. 用cv2.imdecode()解码数组,得到OpenCV能操作的图像格式
  4. 执行裁剪操作,最后按需保存或返回结果

完整代码示例

Flask处理函数

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

app = Flask(__name__)

@app.route('/update-doc', methods=['POST'])
def update_doc():
    # 获取上传的图片
    profileimg = request.files.get('pic')
    # 检查是否有有效文件上传
    if not profileimg or profileimg.filename.strip() == '':
        return "请选择要上传的图片", 400
    
    # 将文件字节转为numpy数组
    file_data = np.frombuffer(profileimg.read(), dtype=np.uint8)
    # 解码为OpenCV彩色图像
    img = cv2.imdecode(file_data, cv2.IMREAD_COLOR)
    
    if img is not None:
        # 裁剪示例:截取图像中从(50,50)到(250,250)的区域(格式:[行起始:行结束, 列起始:列结束])
        cropped_img = img[50:250, 50:250]
        # 保存裁剪后的图片到本地
        cv2.imwrite('cropped_result.jpg', cropped_img)
        return "图片上传并裁剪完成"
    else:
        return "无法识别上传的图片,请确保是PNG/JPG格式", 400

if __name__ == '__main__':
    app.run(debug=True)

注意事项

  • 先安装依赖:pip install numpy opencv-python
  • HTML表单里的enctype="multipart/form-data"必须保留,否则上传的文件会无法正确解析
  • 若需要读取灰度图,可将cv2.IMREAD_COLOR改为cv2.IMREAD_GRAYSCALE

内容的提问来源于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.02 08:05:22