想要效果
将narray格式的图像三维数组转为base64格式进行传递
例如:
narray在plt.imshow()
下的效果
目的是得到里面这幅图的base64编码(不含坐标轴)
opencv可以将narray转为二级制编码的图像格式,再进行base64转码
# image_array为图像样式的三维数组,image_array.shape=(121,170,3)
retval, buffer = cv2.imencode('.jpg', image_array)
pic_str = base64.b64encode(buffer)
pic_str = pic_str.decode()
实际效果
为了验证pic_str
是否正确,把pic_str
转码回图片,得到效果如下
这里有个坑,图片内容基本对了,但是颜色明显有问题,不是想要的效果
原因排查
进行原因排查,锁定问题是在数组转图像格式过程产生的
retval, buffer = cv2.imencode('.jpg', image_array)
原来cv2.imencode()
方法默认是生成bgr
样式图片,但我们需要的是rgb
的
所以需要将image_array的第三维(代表颜色通道)进行顺序调整
修改如下:
retval, buffer = cv2.imencode('.jpg', image_array[..., ::-11]) # 将数组第三维进行反向排序
pic_str = base64.b64encode(buffer)
pic_str = pic_str.decode()
最终结果
把pic_str
转码回图片,得到效果如下:
得到的图片正常,证明pic_str
是正确的base64编码格式