首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >拾遗补阙 | OpenCV中支持网络传输的图像编解码函数

拾遗补阙 | OpenCV中支持网络传输的图像编解码函数

作者头像
OpenCV学堂
发布2026-04-02 20:42:37
发布2026-04-02 20:42:37
800
举报
OpenCV中图像编解码

cv2.imdecode 和 cv2.imencode 是 OpenCV 库中的两个重要函数,用于图像的编码和解码。

代码语言:javascript
复制
cv2.imdecode # 解码器

cv2.imdecode 函数用于将一个字节流解码为图像。它可以处理多种图像格式(如 JPEG、PNG)并将它们转换为 NumPy 数组。这对于从内存中的数据或其他来源加载图像非常有用

代码语言:javascript
复制
cv2.imdecode(buf, flags)
代码语言:javascript
复制
buf: 输入的字节流,通常是一个 bytes 对象。
flags: 解码标志,通常为 cv2.IMREAD_COLOR(默认)、cv2.IMREAD_GRAYSCALE 或 cv2.IMREAD_UNCHANGED。
代码语言:javascript
复制
cv2.imencode #编码器

cv2.imencode 函数用于将图像编码为指定的格式(如 JPEG、PNG)并将其存储在内存中。这对于需要将图像保存到文件之外的其他位置(例如发送到网络或数据库)非常有用。

代码语言:javascript
复制
cv2.imencode(ext, img[, params])
ext: 输出文件的扩展名,如 '.jpg', '.png' 等。
img: 输入图像,通常是一个 NumPy 数组。
params: 编码参数,对于 JPEG 格式可以指定压缩质量(0-100)。

代码演示

代码演示从本地加载读取一张图像,然后通过imencode获取图像字节流数据,方便把图像通过网络传输或者保存到数据库中。imdecode支持从字节流数据转换为指定格式的图像输出,通过用于从网络接受图像数据或者从数据库的字节数据解码为图像数据。

图像编码代码演示

代码语言:javascript
复制
import numpy as np
import cv2
# 假设有一个 JPEG 图像的字节流
image_bytes = b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xff\xc0\x00\x11\x08\x00\x01\x00\x01\x01\x00\xff\xdb\x00C\x00...'
# 使用 imdecode 解码字节流为图像
image = cv2.imdecode(np.frombuffer(image_bytes, np.uint8), cv2.IMREAD_COLOR)
# 显示图像
cv2.imshow('Decoded Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像解码代码演示

代码语言:javascript
复制
import numpy as np
import cv2
# 读取图像
image = cv2.imread('example.jpg')
# 使用 imencode 将图像编码为 JPEG 格式
retval, buffer = cv2.imencode('.jpg', image, [int(cv2.IMWRITE_JPEG_QUALITY), 90])
# 转换字节流为 bytes 对象
image_bytes = buffer.tobytes()
# 打印编码后的图像大小(以字节为单位)
print(f"Encoded image size: {len(image_bytes)} bytes")

实际应用

QT5 C++客户端通过Http协议的POST方式访问图像信息到Python语言的服务端,并返回信息。其中图像提交与接受基于Base64编码。

客户端:

完整的流程是先读取图像,然后通过imencode转换为字节图像数据,再转为Base64编码信息,以JSON格式提交到WEB服务器。

服务器端

从Http的JSON数据中解析Base64数据,然后以imdecode方式解析为图像,在服务器端完成处理以后,再编码为Base64返回客户端。 解析部分代码;

代码语言:javascript
复制
base64_code = data['imdata']
print("your name is ", name)
img_data = base64.b64decode(base64_code)
image_array = np.frombuffer(img_data, np.uint8)
target_image = cv.imdecode(image_array, cv.IMREAD_COLOR)
cv.imwrite("fromqt.png", target_image)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档