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

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相关问答推荐

使用numpy提取数据块

Deliveryter Notebook -无法在for循环中更新matplotlib情节(保留之前的情节),也无法使用动画子功能对情节进行动画

如果值不存在,列表理解返回列表

当独立的网络调用不应该互相阻塞时,'

pandas:排序多级列

python中字符串的条件替换

如何使Matplotlib标题以图形为中心,而图例框则以图形为中心

Pandas GroupBy可以分成两个盒子吗?

如何使用两个关键函数来排序一个多索引框架?

如何杀死一个进程,我的Python可执行文件以sudo启动?

python中csv. Dictreader. fieldname的类型是什么?'

具有相同图例 colored颜色 和标签的堆叠子图

在第一次调用时使用不同行为的re. sub的最佳方式

Django在一个不是ForeignKey的字段上加入'

高效地计算数字数组中三行上三个点之间的Angular

Match-Case构造中的对象可调用性测试

为什么这个正则表达式没有捕获最后一次输入?

401使用有效的OAuth令牌向Google Apps脚本Web App发出POST请求时出现未经授权的错误(";

为什么内置的sorted()对于一个包含降序数字的列表来说,如果每个数字连续出现两次,会变慢?

判断字典中是否有多个值对