小编god*_*eap的帖子

从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
查看次数

使用scipy.io.savemat保存嵌套列表

这与我的最后一个问题有关,可以在这里找到。我正在处理与我在该链接中描述的列表相似的列表,即markerList-因此具有三个级别的列表。我需要将此信息另存为.mat文件,但无法将其保存为正确的类型。当使用scipy.io.savemat时,它将列表保存为200x40x2的单个列表,当列表应为200个单元格的集合时,每个单元格包含40x2的单元格。

我用来保存此代码的代码是:

matdict = dict(markers = (markerList), sorted = (finalStack))
scipy.io.savemat('C:\pathname\\sortedMarkers.mat', matdict)
Run Code Online (Sandbox Code Playgroud)

让我感到困惑的是,它以正确的格式(1x200个单元格,每个单元格的大小不同)保存了markerList,但没有保存finalStack(保存为200 x 40 x 2的单个)。最重要的是,在我弄清楚这段代码的其余部分之前,它将正确保存finalStack-这使我认为,当要保存的数据大小不一致时,它可能另存为一个单元格。(finalStack大小一致; markerList不一致)。

有没有办法将像这样的复杂数据结构另存为.mat文件?

python scipy python-2.7

3
推荐指数
1
解决办法
4257
查看次数

标签 统计

python ×2

numpy ×1

opencv ×1

python-2.7 ×1

scipy ×1