微信公眾號:OpenCV學堂
關注獲取更多計算機視覺與深度學習知識
OpenCV中圖像編解碼
cv2.imdecode 和 cv2.imencode 是 OpenCV 庫中的兩個重要函數,用于圖像的編碼和解碼。
cv2.imdecode # 解碼器cv2.imdecode 函數用于將一個字節流解碼為圖像。它可以處理多種圖像格式(如 JPEG、PNG)并將它們轉換為 NumPy 數組。這對于從內存中的數據或其他來源加載圖像非常有用
cv2.imdecode(buf, flags)buf: 輸入的字節流,通常是一個 bytes 對象。flags: 解碼標志,通常為 cv2.IMREAD_COLOR(默認)、cv2.IMREAD_GRAYSCALE 或 cv2.IMREAD_UNCHANGED。
cv2.imencode #編碼器cv2.imencode 函數用于將圖像編碼為指定的格式(如 JPEG、PNG)并將其存儲在內存中。這對于需要將圖像保存到文件之外的其他位置(例如發送到網絡或數據庫)非常有用。
cv2.imencode(ext, img[, params])ext: 輸出文件的擴展名,如 '.jpg', '.png' 等。img: 輸入圖像,通常是一個 NumPy 數組。params: 編碼參數,對于 JPEG 格式可以指定壓縮質量(0-100)。
代碼演示
代碼演示從本地加載讀取一張圖像,然后通過imencode獲取圖像字節流數據,方便把圖像通過網絡傳輸或者保存到數據庫中。imdecode支持從字節流數據轉換為指定格式的圖像輸出,通過用于從網絡接受圖像數據或者從數據庫的字節數據解碼為圖像數據。
圖像編碼代碼演示
import numpy as npimport 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()
圖像解碼代碼演示
import numpy as npimport 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返回客戶端。 解析部分代碼;
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)


上位機與機器視覺開發者必備技能
系統化掌握OpenCV C# SDK與工作流引擎開發,課程包含數十個OpenCV實現的機器視覺常見案例,代碼行數超過3000+,課件、代碼、資料均可下載。支持答疑!現在購買還可以獲取團購優惠:

推薦閱讀
玩轉YOLOv8~YOLO11全系模型從訓練到推理就靠它了
C#上位機開發專屬OpenCV系統化教程
C#中輕松實現OpenCV算法零代碼開發
深度學習系統化學習路線圖專題(2025版本)
【零代碼】OpenCV C# 快速開發框架演示
正式發布|OpenVINO2025深度學習與大模型部署教程
C#上位機開發專屬OpenCV系統化教程
