相关疑难解决方法(0)

在 Python 之外读取 numpy 数组

在最近的一个问题中,我询问了将大型 numpy 数组转换为分隔字符串的最快方法。我提出这个问题的原因是因为我想获取该纯文本字符串并将其传输(例如通过 HTTP)到用其他编程语言编写的客户端。显然,任何客户端程序都可以轻松使用分隔的数字字符串。但是,有人建议,由于字符串转换速度很慢,因此在 Python 端对数组进行 Base64 编码并将其作为二进制发送会更快。这确实更快。

我现在的问题是,(1)如何确保编码的 numpy 数组能够很好地传输到不同操作系统和不同硬件上的客户端,以及(2)如何在客户端解码二进制数据。

对于(1),我倾向于做如下的事情

import numpy as np
import base64
x = np.arange(100, dtype=np.float64)
base64.b64encode(x.tostring())
Run Code Online (Sandbox Code Playgroud)

我还有什么需要做的吗?

对于 (2),我很乐意在任何编程语言中提供一个示例,其目标是获取浮点数的 numpy 数组并将它们转换为类似的本机数据结构。假设我们已经完成了 Base64 解码并拥有一个字节数组,并且我们还知道 numpy dtype、维度以及所需的任何其他元数据。

谢谢。

python numpy

6
推荐指数
1
解决办法
3213
查看次数

从JPG到b64encode到cv2.imread()

对于我正在编写的程序,我正在使用base64.b64encode(f.read(image))从一台计算机传输图像 - 并尝试在接收脚本中读取它而不将其保存到硬盘驱动器(以尽量减少处理时间).我很难搞清楚如何将图像读入OpenCV而不在本地保存.

以下是我发送图像的代码:

f = open(image.jpg)
sendthis = f.read()
f.close()
databeingsent = base64.b64encode(sendthis)
client.publish('/image',databeingsent,0) 
# this is an MQTT publish, details for SO shouldn't be relevant
Run Code Online (Sandbox Code Playgroud)

同时,这是接收它的代码.(这是on_message函数,因为我使用MQTT进行传输.)

def on_message(client, userdata, msg): # msg.payload is incoming data
    img = base64.b64decode(msg.payload)
    source = cv2.imread(img)
    cv2.imshow("image", source)
Run Code Online (Sandbox Code Playgroud)

消息解码后,我有错误:"TypeError:您的输入类型不是一个numpy数组".

我做了一些搜索,我似乎无法找到相关的解决方案 - 有些存在使用b64从文本文件转换为numpy,但没有一个真正涉及使用图像并立即将解码后的数据读入OpenCV而没有中介将其保存到硬盘驱动器的步骤(使用用于在"发送"脚本中读取文件的逆过程).

我仍然是Python和OpenCV的新手,所以如果有更好的编码方法来发送图像 - 无论如何解决问题.图像的发送方式无关紧要,只要我可以在接收端读取它而不将其保存为.jpg到磁盘.

谢谢!

python opencv numpy

4
推荐指数
1
解决办法
6402
查看次数

标签 统计

numpy ×2

python ×2

opencv ×1