import socket
import cv2
import numpy
def recv_size(sock, count):
buf = ''
while count:
newbuf = sock.recv(count)
if not newbuf: return None
buf += newbuf
count -= len(newbuf)
return buf
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
address = ('192.168.1.105', 8010)
s.bind(address)
s.listen(True)
print ('Waiting for images...')
conn, addr = s.accept()
while True:
length = recv_size(conn,16)
if isinstance(length, str):
print(int(length))
stringData = recv_size(conn,int(length))
data =numpy.fromstring(stringData, dtype='uint8')
decimg = cv2.imdecode(data,1)
cv2.imshow('SERVER', decimg)
if cv2.waitKey(10) == 27:
break
print('Image recieved successfully!')
if cv2.waitKey(10) == 27:
break
s.close()
cv2.destroyAllWindows()
客户端:
import socket
import cv2
import numpy
from time import sleep
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
address_server = ('192.168.1.105', 8010)
sock.connect(address_server)
capture = cv2.VideoCapture(0)
ret, frame = capture.read()
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 50]
while ret:
ret, frame = capture.read()
frame= cv2.resize(frame, (1280, 720))
#print(frame.shape)
img_encode = cv2.imencode('.jpg', frame, encode_param)[1]
data = numpy.array(img_encode)
stringData = data.tostring()
print(str(len(stringData)).ljust(16))
sock.send(str(len(stringData)).ljust(16))
sock.send(stringData)
sock.close()
cv2.destroyAllWindows()