将图像从一台服务器发送到另一台

时间:2019-08-07 17:13:31

标签: python sockets opencv encoding base64

我想将图像从一台服务器发送到另一台服务器。我不想将文件保存在磁盘上。我直接想读取发送数据。我为此写了一个脚本。

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

1 个答案:

答案 0 :(得分:0)

我建议您使用内存映射文件而不是 ZeroMQ ,因为这样可以减少延迟。 这是我写的可以使用的示例:https://github.com/off99555/python-mmap-ipc