Flask接收表单上传图片并使用OpenCV读取裁剪的方法
解决Flask上传图片后用OpenCV读取并裁剪的问题
你的代码里犯了个常见错误:cv2.imread()只能接收文件路径字符串,但request.files['pic']返回的是Flask的FileStorage对象,直接传进去肯定读不出图片。下面是正确的实现方法:
核心思路
- 先拿到上传的文件对象,确认文件存在
- 把文件的字节内容转成numpy数组(OpenCV基于numpy处理图像)
- 用
cv2.imdecode()解码数组,得到OpenCV能操作的图像格式 - 执行裁剪操作,最后按需保存或返回结果
完整代码示例
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
相关产品推荐
相关产品推荐

