以下是Python利用OpenCV实现图像网络传输的完整攻略,包括两个示例。
OpenCV实现图像网络传输的基本步骤
OpenCV实现图像网络传输的基本步骤如下:
- 导入必要的库
import cv2
import numpy as np
import socket
import struct
- 创建服务器
创建服务器并监听客户端连接。
# 创建服务器
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8000))
server_socket.listen(1)
# 等待客户端连接
client_socket, _ = server_socket.accept()
- 读取图像
使用OpenCV读取图像。
读取图像
img = cv2.imread('image.jpg')
- 编码图像
将图像编码为JPEG格式。
# 编码图像
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]
result, img_encode = cv2.imencode('.jpg', img, encode_param)
- 发送图像
将编码后的图像发送给客户端。
# 发送图像
data = np.array(img_encode)
string_data = data.tostring()
client_socket.send(struct.pack('i', len(string_data)))
client_socket.send(string_data)
- 接收图像
接收客户端发送的图像。
# 接收图像
data_len = struct.unpack('i', client_socket.recv(4))[0]
data = b''
while len(data) < data_len:
data += client_socket.recv(1024)
img_decode = cv2.imdecode(np.frombuffer(data, dtype=np.uint8), cv2.IMREAD_COLOR)
- 显示图像
使用OpenCV显示接收到的图像。
# 显示图像
cv2.imshow('image', img_decode)
cv2.waitKey(0)
cv2.destroyAllWindows()
以上是Python利用OpenCV实现图像网络传输的完整攻略,通过以上步骤和示例,我们可以轻松地实现图像的网络传输。
示例一:将本地图像发送到客户端
以下是将本地图像发送到客户端的示例代码:
# 创建服务器
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8000))
server_socket.listen(1)
# 等待客户端连接
client_socket, _ = server_socket.accept()
# 读取图像
img = cv2.imread('image.jpg')
# 编码图像
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]
result, img_encode = cv2.imencode('.jpg', img, encode_param)
# 发送图像
data = np.array(img_encode)
string_data = data.tostring()
client_socket.send(struct.pack('i', len(string_data)))
client_socket.send(string_data)
# 关闭连接
client_socket.close()
server_socket.close()
上面的代码将本地的image.jpg
图像发送到客户端。
示例二:接收客户端发送的图像并显示
以下是接收客户端发送的图像并显示的示例代码:
# 创建客户端
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 8000))
# 接收图像
data_len = struct.unpack('i', client_socket.recv(4))[0]
data = b''
while len(data) < data_len:
data += client_socket.recv(1024)
img_decode = cv2.imdecode(np.frombuffer(data, dtype=np.uint8), cv2.IMREAD_COLOR)
# 显示图像
cv2.imshow('image', img_decode)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 关闭连接
client_socket.close()
上面的代码接收客户端发送的图像并显示。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 利用opencv实现图像网络传输 - Python技术站