将numpy数组转换为byte数组并返回numpy数组后,数组不相等

我想将通过opencv导入的图像通过套接字发送到另一台计算机。但是接收的数据和发送的数据不相等。

我已经转换了通过读取获得的numpy数组数据,并将其转换为字节数组,以便通过套接字发送。接着 我已经将另一端收到的字节数组转换回了numpy数组。但是我无法从接收到的数据中查看图像。

这是发件人端的代码段

im = cv2.imread('view.jpg')
stringimage = np.array_str(im)
byteimage = str.encode(stringimage)
sock.sendto(byteimage,("127.0.0.1",5002))

这是接收器端的代码段

byteimage,addr = sock.recvfrom(1024)
decoded = bytes.decode(byteimage)
backstring = np.array(decoded)
cv2.imshow('RealSense',backstring)
cv2.waitKey(0)

我收到此错误

  

TypeError:不支持mat数据类型= 19

此行代码

cv2.imshow('RealSense',backstring)

更新

在获得建议之后,并参考了其他一些材料,我想出了一个适用于我的方案的解决方案。

图像发送方

#color_image is my opencv image

retval,data = cv2.imencode('.jpg',color_image,ENCODE_PARAMS)
b64_bytes = base64.b64encode(data)
b64_string = b64_bytes.decode()
sock.sendto(str.encode(b64_string),5002))

图像接收器端

data,addr = sock.recvfrom(60000)
img = imread(io.BytesIO(base64.b64decode(data)))

请告诉我我的解决方案中是否存在任何错误的编码

luobin19870620 回答:将numpy数组转换为byte数组并返回numpy数组后,数组不相等

  

byteimage,addr = sock.recvfrom(1024)

这会将您的缓冲区大小限制为1024个字节。

阅读docs

,

一个类似的问题得到了有益的回答here.

问题在于,从字符串构造numpy数组不会像编写数据那样将数据解析为float / int(并且不需要转换为字符串来发送数据)。

这是应用该解决方案的简化示例:

import numpy as np
from io import BytesIO

a = np.array([1,2])
b = BytesIO()
np.save(b,a)

"""-----send the data-----"""
# send(b.getvalue())


data = BytesIO(b.getvalue())
c = np.load(data)
print(a)
print(c)

结果:

[1 2]
[1 2]
本文链接:https://www.f2er.com/3140037.html

大家都在问