当前位置: 首页 > 面试题库 >

从JPG到b64encode到cv2.imread()

桑飞语
2023-03-14
问题内容

对于正在编写的程序,我正在使用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

同时,这是接收它的代码。(这在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)

消息解码后,出现错误:“ TypeError:您的输入类型不是numpy数组”。

我已经进行了一些搜索,但似乎找不到相关的解决方案-
存在一些有关使用b64将文本文件转换为numpy的解决方案,但这些都与使用图像并立即将解码后的数据读取到OpenCV中而没有任何中介将其保存到硬盘驱动器的步骤(使用用于读取“发送”脚本中文件的逆过程)。

我对Python和OpenCV还是很陌生,所以如果有更好的编码方法来发送图像-
可以解决问题的任何方法。图像的发送方式无关紧要,只要我可以在接收端读取它而无需将其另存为.jpg到磁盘即可。

谢谢!


问题答案:

您可以使用以下方法从解码数据中获取一个numpy数组:

import numpy as np
...
img = base64.b64decode(msg.payload)
npimg = np.fromstring(img, dtype=np.uint8)

然后,您需要进行解码以从内存中的缓冲区读取图像。imread是指从文件加载图像。

所以:

import numpy as np
...
def on_message(client, userdata, msg): # msg.payload is incoming data
    img = base64.b64decode(msg.payload); 
    npimg = np.fromstring(img, dtype=np.uint8); 
    source = cv2.imdecode(npimg, 1)


 类似资料:
  • 问题内容: 我最近开始使用openCV和python,并决定分析一些示例代码来了解事情的完成方式。 但是,我发现的示例代码不断抛出此错误: 我正在使用的代码可以在下面找到: 我的安装有问题吗?我使用此网站作为安装python和openCV的指南。 问题答案: OpenCV 3.0带有一些名称空间更改,这可能是其中之一。另一个答案中给出的功能参考是针对OpenCV 2.4.11的,不幸的是,其中存在

  • 问题内容: 我已经在Raspberry Pi上的Occidentalis操作系统(Raspbian的变体)上安装了OpenCV,使用的是在此处找到的jayrambhia的脚本。它安装了版本2.4.5。 当我尝试import cv2使用Python程序时,收到以下消息: 该文件cv2.so存储在 在中也有文件夹,这可能是个问题,但我不确定。 这可能是路径错误吗?感谢你的任何帮助,我是Linux的新手

  • 中还有名为Python3.2和Python2.6的文件夹,这可能是一个问题,但我不确定。 这可能是路径错误吗?感谢任何帮助,我是Linux的新手。

  • 问题内容: 我想按照http://opencv-python- tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_matcher/py_matcher.html中的说明 在Python中使用基于flann的匹配器 由于我使用的是OpenCV 3.0.0,因此必须调整有关SIFT检测器初始化的代码。其余部分不变 运行代码时

  • 问题内容: 我想我在这里遇到了一些classpath忧郁症。我一直在关注这些例子。我看了教程。但是似乎没有什么对我有用。 假设我在以下URI中具有JPEG: 假设我有一个带有的Swing应用,并且我想将此JPEG添加到JPanel中(位置/布局无关紧要)。 那么如何做到这一点? 我没有收到任何错误或异常,只是没有看到JPEG负载。我要使用的代码是这样的: 请告知…我从今天中午开始及其午夜一直在处理

  • 我得到的错误,而不是安装所有的依赖,如python3.6,Numpy,opencv,open-contrib-python。 我试过升级opencv 错误消息 模块cv2.cv2没有属性