1、base64 opencv互转
def image_to_base64(image_np):
"""
将np图片(imread后的图片)转码为base64格式
image_np: cv2图像,numpy.ndarray
Returns: base64编码后数据
"""
image = cv2.imencode('.png', image_np)[1]
image_code = str(base64.b64encode(image))[2:-1]
return image_code
def base64_to_image(base64_code):
"""
将base64编码解析成opencv可用图片
base64_code: base64编码后数据
Returns: cv2图像,numpy.ndarray
"""
# base64解码
img_data = base64.b64decode(base64_code)
# 转换为np数组
img_array = np.fromstring(img_data, np.uint8)
# 转换成opencv可用格式
img = cv2.imdecode(img_array, cv2.COLOR_RGB2BGR)
return img
2、opencv 二进制互转
def bytes2cv(im):
'''二进制图片转cv2
:param im: 二进制图片数据,bytes
:return: cv2图像,numpy.ndarray
'''
return cv2.imdecode(np.array(bytearray(im), dtype='uint8'), cv2.IMREAD_UNCHANGED) # 从二进制图片数据中读取
def cv2bytes(im):
'''cv2转二进制图片
:param im: cv2图像,numpy.ndarray
:return: 二进制图片数据,bytes
'''
return np.array(cv2.imencode('.png', im)[1]).tobytes()
3、综合
# -*- coding:utf-8 -*-
import cv2
import numpy as np
import base64
from sys import getsizeof
def bytes2cv(im):
'''二进制图片转cv2
:param im: 二进制图片数据,bytes
:return: cv2图像,numpy.ndarray
'''
return cv2.imdecode(np.array(bytearray(im), dtype='uint8'), cv2.IMREAD_UNCHANGED) # 从二进制图片数据中读取
def cv2bytes(im):
'''cv2转二进制图片
:param im: cv2图像,numpy.ndarray
:return: 二进制图片数据,bytes
'''
return np.array(cv2.imencode('.png', im)[1]).tobytes()
def image_to_base64(image_np):
"""
将np图片(imread后的图片)转码为base64格式
image_np: cv2图像,numpy.ndarray
Returns: base64编码后数据
"""
image = cv2.imencode('.png', image_np)[1]
image_code = str(base64.b64encode(image))[2:-1]
return image_code
def base64_to_image(base64_code):
"""
将base64编码解析成opencv可用图片
base64_code: base64编码后数据
Returns: cv2图像,numpy.ndarray
"""
# base64解码
img_data = base64.b64decode(base64_code)
# 转换为np数组
img_array = np.fromstring(img_data, np.uint8)
# 转换成opencv可用格式
img = cv2.imdecode(img_array, cv2.COLOR_RGB2BGR)
return img
if __name__ == '__main__':
filename = 'test.jpg'
img = cv2.imread(filename, cv2.IMREAD_UNCHANGED)
print("cv_memory=",getsizeof(img))
by=cv2bytes(img)
print("by_memory=",getsizeof(by))
im=bytes2cv(by)
image_code = image_to_base64(img)
print("base64_memory=",getsizeof(image_code))
# print("image_code=", image_code_mem)
img = base64_to_image(image_code)
cv2.imshow('im', im)
cv2.waitKey(0)
cv2.destroyAllWindows()
总结:编码后图像耗存计算