steamlit是一个可以快速建立网站的界面。在学校安排的实训项目中,我们要实现基于内容的图像检索系统设计和实现。其中的分支任务就是检索上传的图像。
我们使用了steamlit的uploadfile组件,该组件能将我们需要的图片以字节的方式上传到后端程序中。现在面临的问题就是如何解析这个16进制文件。
解决方案是PIL库的Image.open();他不仅可以直接读取文件路径下的文件,还可以通过字节流读取文件。
from io import BytesIO
import numpy as np
from PIL import Image
import streamlit as st
import cv2
#创建file_uploader组件
uploaded_file = st.file_uploader("Choose a file")
if uploaded_file is not None:
# To read file as bytes:
bytes_data = uploaded_file.getvalue()
#将字节数据转化成字节流
bytes_data = BytesIO(bytes_data)
#Image.open()可以读字节流
capture_img = Image.open(bytes_data)
capture_img = cv2.cvtColor(np.asarray(capture_img), cv2.COLOR_RGB2BGR)