我正在编写一个程序,需要从一台计算机传输图像。使用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
同时,这是接收它的代码。(由于我正在使用MQTT进行传输,所以这是在on_message函数中。)
def on_message(client, userdata, msg): # msg.payload is incoming data
img = base64.b64decode(msg.payload)
source = cv2.imread(img)
cv2.imshow("image", source)
消息解码后,出现了错误:“TypeError:您的输入类型不是numpy数组”。
我进行了一些搜索,但似乎找不到相关的解决方法 - 一些存在于使用b64从文本文件转换为numpy的解决方案,但没有真正涉及使用图像并立即将解码数据读入OpenCV,而不是将其保存到硬盘(使用“发送”脚本中用于读取文件的反向过程)。
我仍然对Python和OpenCV很陌生,因此如果有更好的编码方法来发送图像 - 任何解决问题的方法都可以。发送图像的方式无关紧要,只要我能在接收端读取它,而不必将其保存为.jpg文件。
谢谢!
imdecode
代替imread
。 - Mikinp.array(list(img), dtype=np.uint8)
或者np.fromstring(img, dtype=np.uint8)
可以解决问题。但是我不懂 Python。我的建议只是你需要使用 imdecode。如何正确获取参数类型取决于你 :D - Miki