opencv-python图片转换、尺寸、传输

环境介绍

python 3.7.3
opencv-python 4.4.0.46
numpy 1.19.3

图片转换

opencv读取文件

img1 = cv2.imread('buka.png')

opencv读取中文路径图片

img1 = cv2.imdecode(np.fromfile('buka吧.png', np.uint8), cv2.IMREAD_COLOR)

opencv读取二进制流

bts_1 = open('buka.png', 'rb').read()
img2 = cv2.imdecode(np.frombuffer(bts_1, np.uint8), cv2.IMREAD_COLOR)

opencv读取1d-ndarray

img3 = cv2.imdecode(np.fromfile('buka.png', np.uint8), cv2.IMREAD_COLOR)

opencv读取opencv-encode-bytes

enc_npy_2 = cv2.imencode('.jpg', cv2.imread('buka.png'))[1] # (47184, 1) uint8
bts_2 = enc_npy_2.tobytes()
img_1 = cv2.imdecode(np.frombuffer(bts_2, np.uint8), cv2.IMREAD_COLOR)

opencv读取base64串

b64_1 = base64.b64encode(bts_1).decode('utf8')
b64_2 = base64.b64encode(bts_2).decode('utf8')
img_2 = cv2.imdecode(np.frombuffer(base64.b64decode(b64_2), np.uint8), cv2.IMREAD_COLOR)

opencv读取mat-npy文件

npy_4 = np.save('buka.npy', cv2.imread('buka.jpg'))
img_4 = np.load('buka.npy')

opencv读取1d-ndarray-npy文件

npy_5 = np.save('buka.npy', np.frombuffer(base64.b64decode(b64_2), np.uint8))
img_5 = cv2.imdecode(np.load('buka.npy'), cv2.IMREAD_COLOR)

opencv读取opencv-encode-npy文件

npy_6 = np.save('buka.npy', enc_npy_2)
img_6 = cv2.imdecode(np.load('buka.npy'), cv2.IMREAD_COLOR)

图片尺寸

print(sys.getsizeof(bts_1))  # 160910
print(sys.getsizeof(enc_npy_2))  # 37370
print(sys.getsizeof(bts_2))  # 37291
print(sys.getsizeof(b64_1))  # 214553
print(sys.getsizeof(b64_2))  # 49729
print(sys.getsizeof(img1))  # 631928
print(sys.getsizeof(img_1))  # 631928

图片传输

依据上面尺寸介绍,我们给出下表,从左向右传输成本增大

图片格式\变量类型bytes(encode-npy)base64(w*h*c)mat-npy
jpg372913737049729631800631928
png160910158k214553631800631928

由表可知,只考虑传输字节长度的情况下:
最优文件流传输,其次base64编码,最次mat-npy文件流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值