这是我的代码片段,它通过以太网将数据从一台电脑发送到另一台电脑,工作正常.

import cv2, socket, pickle
import numpy as np
while True:
    ret, photo = cap.read()
    ret, buffer = cv2.imencode(".jpg",photo, [int(cv2.IMWRITE_JPEG_QUALITY),30])
    x_as_bytes = pickle.dumps(buffer)
    socket.sendto((x_as_bytes),(server_ip,server_port))

在接收器端,我无法解码它.它说:

Traceback (most recent call last):
    File "receive.py", line 12, in <module>
       data=pickle.loads(data)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)

这是接收器端的代码段

while True:
    x=s.recvfrom(1000000)
    clientip = x[1][0]
    data=x[0]
    print(data)
    data=pickle.loads(data) #ERROR IN THIS LINE
    print(type(data))
    data = cv2.imdecode(data, cv2.IMREAD_COLOR)
    cv2.imshow('server', data)
    if cv2.waitKey(10) == 13:
        break

推荐答案

你为什么还要对数据进行酸洗?无论如何,您都可以通过UDP发送二进制数据:

# Synthetic image
im = np.random.randint(0, 256,(480, 640, 3), dtype=np.uint8)

# JPEG encode
ret, buffer = cv2.imencode(".jpg", im, [int(cv2.IMWRITE_JPEG_QUALITY),30])

# Send
socket.sendto(buffer.tobytes(), (server_ip,server_port))

然后在接收端:

JPEG = s.recvfrom(1000000)
im = cv2.imdecode(np.frombuffer(JPEG, dtype=np.uint8), cv2.IMREAD_UNCHANGED)

Python相关问答推荐

selenium webdriver 找不到交互式 web 元素

无法在类方法中访问 Dundered 全局变量

减去 Pandas 数据框中的条目并存储在新列中

如果数字在Pandas 的指定范围内,如何返回值

如何在 python 中将多个数据集添加到单个图中?

如何获得连续条件的最大值为真?

计算 Pandas 数据框行内 Python 列表中元素的出现次数

有没有办法在Pandas 中使用 usecols 读取必需和可选列?

Pandas 保留每组的前 N ​​个值并将其他值设置为 0

如何在 pandas 中使用 count、groupby 和 max?

计算Pandas 中的连续值组

python principals井字游戏输入 - 单行可能吗?

Python:在正则表达式匹配之间提取多行

在Pandas 的列子集上替代 for 循环

获取 yyyy-mm-dd 中两个日期之间的所有日期

如何将频率列中的每个元素转换为新的数据框行?

将多个列表写入 CSV 中单个单元格中的不同列

判断值是否在枚举中的惯用方法

将用户数据列表转换为对象的最佳方法是什么?

循环测试文件并为每个文件绘制