Arn*_*ein 5 python numpy python-requests
我对一件非常简单的事情感到困惑:我正在使用在线服务进行图像处理并发送我正在使用的图像
var_0 = requests.post(api_url, params=params, headers=headers, data=image_data)
Run Code Online (Sandbox Code Playgroud)
whereimage_data应该编码为二进制字符串。例如,以下示例正常工作:
image_data = open(image_path, "rb").read()
var_0 = requests.post(api_url, params=params, headers=headers, data=image_data)
Run Code Online (Sandbox Code Playgroud)
但是,在某些情况下,我需要在图像已经打开并且采用 numpy.array 格式时发送图像。
我应该如何转换我的图像以便能够通过请求发送?
它在提供的链接中说明“支持的输入图像格式包括 JPEG、PNG、GIF(第一帧)、BMP。” 因此,您的数据必须采用其中一种格式。numpy 数组不合适。它需要转换为例如 PNG 图像。
使用该matplotlib.pyplot.imsave()函数最容易做到这一点。但是,结果应保存到内存缓冲区(以发送到 API),而不是文件。在 Python 中处理这个问题的方法是使用io.BytesIO()对象。
综合起来,问题的解决方案是
import io
import numpy as np
import matplotlib.pyplot as plt
buf = io.BytesIO()
plt.imsave(buf, image_np, format='png')
image_data = buf.getvalue()
var_0 = requests.post(api_url, params=params, headers=headers, data=image_data)
Run Code Online (Sandbox Code Playgroud)
image_np图像作为numpy数组在哪里。
另请注意,该行image_data = buf.getvalue()不是必需的。相反,缓冲区内容可以直接在 API 调用中使用。