【发布时间】:2019-05-30 15:24:20
【问题描述】:
我有一个在 ROS 环境下运行 Python2 的工作站,它从机器人获取相机图像并使用标准 socket 库通过网络将其发送到 Python3 机器。我似乎无法正确解开 opencv ndarray 图像。
我能够成功地将简单数据作为列表传输,但在尝试传输图像时遇到错误。
在Python2系统上,我是这样获取我的图片的:
img = CvBridge().imgmsg_to_cv2(img_data, desired_encoding='bgr8') # Convert from ROS image to OpenCV image
获取一个ndarray。 我将其序列化为:
data = pickle.dumps(img, protocol=0)
然后我发送它。 回到 Python3 机器上,我尝试使用以下方法解开它:
response = pickle.loads(data_in, encoding='latin1') # To read a Python2 dump
此时,我得到以下错误:
_pickle.UnpicklingError: the STRING opcode argument must be quoted
我发现的唯一其他解决方案解决了在 Unix 和 Windows 机器之间传输数据的情况,这不是我的情况。
【问题讨论】:
-
np.load 有几个参数可以处理 py2 和 3 之间的泡菜差异
-
@hpaulj np.load 处理文件,但我的数据流是相机 > 序列化 > 传输,我从不保存图像
标签: python numpy sockets pickle ros