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

向API端点发送cv2读取的图片时格式报错,求正确传输方法

解决cv2读取图片通过POST请求传输的格式问题

原代码的核心错误

  1. 直接将cv2读取的numpy数组拼接到URL参数中:numpy数组会被强制转为字符串格式(如[[[...]]]),服务端拿到的是无效字符串,无法还原为原始图像数据
  2. 误用URL参数传输图像:URL有长度限制,且二进制图像数据转字符串会出现乱码,完全不适合传输大体积图像
  3. POST请求未利用请求体:POST的设计初衷是传输复杂数据,却用了GET风格的URL参数传值

正确的客户端实现

场景1:无需提前用cv2处理图片,直接上传文件

import requests

plate_path = "plate_1.png"
api_url = "http://127.0.0.1:5000/get-user"

# 以二进制模式读取文件,通过files参数上传
with open(plate_path, 'rb') as img_file:
    response = requests.post(api_url, files={'image': img_file})
print(response.text)

场景2:已用cv2读取并处理图片,需传输处理后的图像

import cv2
import requests
import numpy as np

plate_path = "plate_1.png"
api_url = "http://127.0.0.1:5000/get-user"

# cv2读取图片
img = cv2.imread(plate_path)
# 将numpy数组编码为JPG格式的字节流
_, encoded_img = cv2.imencode('.jpg', img)
img_bytes = encoded_img.tobytes()

# 上传字节流,指定文件名和MIME类型
response = requests.post(
    api_url,
    files={'image': ('processed_plate.jpg', img_bytes, 'image/jpeg')}
)
print(response.text)

对应的服务端实现

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

app = Flask(__name__)

@app.route("/get-user", methods=["POST"])
def get_user():
    # 获取上传的图像文件
    image_file = request.files.get('image')
    if not image_file:
        return "未上传图像", 400
    
    # 读取文件字节流,转换为cv2可处理的格式
    img_bytes = image_file.read()
    img_np = np.frombuffer(img_bytes, np.uint8)
    img = cv2.imdecode(img_np, cv2.IMREAD_COLOR)
    
    # 调用你的图像处理函数
    return read_image(img)

def read_image(image):
    # 这里替换为你的实际图像处理逻辑
    # 示例:返回图像尺寸信息
    return f"图像尺寸:{image.shape}"

def home():
    return "首页"

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

关键说明

  • 用HTTP POST的files字段传输图像是标准方案,既避免了URL长度限制,也能保证二进制数据的完整性
  • 服务端必须通过request.files获取上传的文件,再通过np.frombuffer和cv2.imdecode将字节流还原为cv2可用的numpy数组
  • 若客户端已处理图像,必须先将numpy数组编码为标准图像格式(JPG/PNG)的字节流,不能直接传输原始数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:13:29