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

如何通过requests.post发送opencv读取的numpy array格式图像到服务器

OpenCV读取的视频帧直接通过requests上传到服务器的解决方案

问题原因

你遇到的问题本质是requests库对files参数的处理规则差异:

  • 传入open()返回的io.BufferedReader对象时,requests会自动提取文件名、推断文件MIME类型,补全上传请求的文件字段元信息,符合大多数后端的文件上传校验规则
  • 直接传入原始字节串时,requests不会为该字段附加文件名、MIME类型等元信息,后端会将其识别为普通表单字段,而非上传的图片文件,因此返回异常

你不需要强行将字节转为io.BufferedReader类型,使用io.BytesIO包装编码后的图片字节得到类文件对象,就可以被requests正确识别。

解决方案

使用io.BytesIO包装编码后的图片字节,同时显式指定上传文件的文件名和MIME类型,适配后端校验规则。

完整代码示例

import cv2
import numpy as np
import requests
import io

# 替换为你的实际参数
vid = cv2.VideoCapture(0) 
url = "你的上传接口地址"
user = "你的接口认证账号"
pwd = "你的接口认证密码"

ret, frame = vid.read()
if not ret:
    raise ValueError("视频帧读取失败")

# 将帧编码为jpg格式,可添加参数[cv2.IMWRITE_JPEG_QUALITY, 90]调整输出画质
encode_ret, img_encode = cv2.imencode('.jpg', frame)
if not encode_ret:
    raise ValueError("图像编码失败")

# 包装为类文件对象
img_file = io.BytesIO(img_encode.tobytes())

# 发起请求,files字段格式为(文件名, 文件对象, MIME类型),可根据后端要求调整参数
rsp = requests.post(
    url,
    auth=(user, pwd),
    files={'img': ('capture.jpg', img_file, 'image/jpeg')}
)

# 验证响应结果
print(rsp.status_code)
print(rsp.text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:15:03