如何使用 PIL 对 numpy 数组进行编码,例如 opencv 的 cv2.imencode()?
Posted
技术标签:
【中文标题】如何使用 PIL 对 numpy 数组进行编码,例如 opencv 的 cv2.imencode()?【英文标题】:How to encode a numpy array with PIL, like opencv's cv2.imencode()? 【发布时间】:2022-01-13 14:31:03 【问题描述】:我正在用烧瓶制作一个 REST API,我想将图像发送到我的服务器。到目前为止,我做到了-
from PIL import Image, ImageOps
import cv2
image= Image.open("image.jpg")
size = (224, 224)
image = ImageOps.fit(image, size, Image.ANTIALIAS)
image= np.array(image)
_, JPEG = cv2.imencode('.jpg', image)
response_raw = requests.post(test_url, data=JPEG.tostring(), headers=headers)
现在它工作得非常好,但不幸的是我在我的最终项目中使用了 OPENCV。所以我用 PIL 进行了测试,试图复制 cv2.imencode()
方法,但它没有用。我这样做了,替换了cv2.imencode
方法(并删除了image=np.array(image)
-
buffer = BytesIO()
image.save(buffer, format="JPEG")
JPEG = buffer.getvalue()
这不起作用,因为type(JPEG)
返回<class 'bytes'>
,而工作代码(带有cv2.imencode("jpg", img)
)返回<class 'numpy.ndarray'>
。
如何对 numpy 数组进行编码处理?
【问题讨论】:
试试,JPEG = np.array(buffer.getvalue())
,你得到了什么?
我很困惑你为什么会感到困惑。 bytes
对象包含字节。一个 uint8 类型的 numpy 数组(你有...)也包含字节。
好吧,我只是对整个事情感到非常困惑。 np.array(buffer.get_value()) 似乎有效。谢谢!对不起!
【参考方案1】:
JPEG = np.array(buffer.getvalue())
似乎有效
【讨论】:
以上是关于如何使用 PIL 对 numpy 数组进行编码,例如 opencv 的 cv2.imencode()?的主要内容,如果未能解决你的问题,请参考以下文章
PIL 图像到数组(numpy 数组到数组) - Python
如何将 NumPy 数组转换为应用 matplotlib 颜色图的 PIL 图像
Python - 尝试使用 PIL 的 Image.fromarray 保存 numpy 数组时出现 TypeError