我想将图像从一台服务器发送到另一台服务器。我不想将文件保存在磁盘上。我直接想读取发送数据。我为此写了一个脚本。
server.py
import socket
import cv2
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", 6002))
s.listen(10)
c, addr = s.accept()
print('{} connected.'.format(addr))
img = cv2.imread("test.jpg")
img = cv2.imencode('.jpg', img)[1].tostring()
c.send( str(len(img)).ljust(16));
c.send(img)
i = 0
datas = img[i:i+1024]
i = i + 1024
while datas:
datas = img[i:i+1024]
c.send(datas)
i = i + 1024
print("Done sending...")
client.py
import socket
import numpy as np
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("", 6002))
img = ""
while True:
datas = s.recv(1024)
while datas:
img = img + str(datas)[2:-1]
datas = s.recv(1024)
break
print("Done receiving")
img_np = np.fromstring(img, np.uint8)
img_np = cv2.imdecode(img_np, cv2.IMREAD_COLOR)
我正在img
中接收图像,但是当使用opencv对其进行解码时,却得到了空矩阵img_np
。
答案 0 :(得分:0)
我建议您使用内存映射文件而不是 ZeroMQ ,因为这样可以减少延迟。 这是我写的可以使用的示例:https://github.com/off99555/python-mmap-ipc