python tcp传输图片_通过TCP发送图像

您收到的数据不是垃圾邮件。这是发送数据。但它是以字节为单位发送的。因此,在接收端,您需要在处理数据之前将字节转换为字符串。阅读this以更好地理解socket编程中的数据发送和接收,阅读this以了解当前版本opencv中使用的方法。

你也不需要用简历来完成这项任务。当前版本的opencv仅通过import cv2提供了这样做的方法。

下面是一个工作代码,虽然它的通信被简化了。

客户端.py#!/usr/bin/python

import socket

import cv2

import numpy

TCP_IP = 'localhost'

TCP_PORT = 5001

sock = socket.socket()

sock.connect((TCP_IP, TCP_PORT))

capture = cv2.VideoCapture(0)

ret, frame = capture.read()

encode_param=[int(cv2.IMWRITE_JPEG_QUALITY),90]

result, imgencode = cv2.imencode('.jpg', frame, encode_param)

data = numpy.array(imgencode)

stringData = data.tostring()

sock.send( str(len(stringData)).ljust(16));

sock.send( stringData );

sock.close()

decimg=cv2.imdecode(data,1)

cv2.imshow('CLIENT',decimg)

cv2.waitKey(0)

cv2.destroyAllWindows()

服务器.py#!/usr/bin/python

import socket

import cv2

import numpy

def recvall(sock, count):

buf = b''

while count:

newbuf = sock.recv(count)

if not newbuf: return None

buf += newbuf

count -= len(newbuf)

return buf

TCP_IP = 'localhost'

TCP_PORT = 5001

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind((TCP_IP, TCP_PORT))

s.listen(True)

conn, addr = s.accept()

length = recvall(conn,16)

stringData = recvall(conn, int(length))

data = numpy.fromstring(stringData, dtype='uint8')

s.close()

decimg=cv2.imdecode(data,1)

cv2.imshow('SERVER',decimg)

cv2.waitKey(0)

cv2.destroyAllWindows()


版权声明:本文为weixin_39849070原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。