运行环境:image(虚拟环境) opencv-python streamlit numpy
image 虚拟环境配置:
conda create -n image python=3.9
conda activate image //激活虚拟环境
pip install streamlit //安装streamlit
pip install opencv-python //安装opencv-python
pip install numpy //安装numpy
创建index.py
import streamlit as st
st.title("首页")
#字典
pages ={
#一级菜单
'Hough变换':
[
st.Page('Page/line_page.py',title='直线检测'),
st.Page('Page/circle_page.py',title='圆形检测')
],
'边界检测':
[
st.Page('Page/edgedet_page.py',title='边界检测'),
#st.Page('circle_page.py',title='圆形检测')
],
'test':[st.Page('Page/test.py',title='test1')]
}
#创建导航栏
pg = st.navigation(pages)
pg.run()
创建edgedet_page.py
import streamlit as st
import cv2
import numpy as np
st.title("边界检测")
files = st.file_uploader('图形上传',type=["jpg","png","jpeg"])
#将页面拆分为两个布局
col1,col2 = st.columns(2)
if files is not None:
#通过getvalue获得的数据是二值文件
values = files.getvalue()
#st.write(values)
#转换为opencv可以识别的
cv2_img = cv2.imdecode(np.frombuffer(values,np.uint8),cv2.IMREAD_COLOR)
#将左边布局显示原始图像
with col1:
st.image(cv2_img,'原始图像')
#业务逻辑
#边界检测
img_gary = cv2.cvtColor(cv2_img,cv2.COLOR_BGR2GRAY)
edge = cv2.Canny(img_gary,100,200)
with col2:
st.image(edge,'检测结果')
#image自动处理了二值文件
st.image(cv2_img)
在Anaconda prompt里面进入index.py 所在目录,注意若在D盘,则先需要D:切换盘符
(image) C:\Users\Administrator\Desktop\傅里叶变换>cd 5.16课程code
(image) C:\Users\Administrator\Desktop\傅里叶变换\5.16课程code>streamlit run index.py
效果图:
实现边缘检测代码
import streamlit as st
import cv2
import numpy as np
st.title("边界检测")
files = st.file_uploader('图形上传',type=["jpg","png","jpeg"])
#将页面拆分为两个布局
col1,col2 = st.columns(2)
if files is not None:
#通过getvalue获得的数据是二值文件
values = files.getvalue()
#st.write(values)
#转换为opencv可以识别的
cv2_img = cv2.imdecode(np.frombuffer(values,np.uint8),cv2.IMREAD_COLOR)
#将左边布局显示原始图像
with col1:
st.image(cv2_img,'原始图像')
#业务逻辑(最好单独放一个utils.py文件里面处理)
def cannyDet(img):
edge = cv2.Canny(cv2.cvtColor(cv2_img,cv2.COLOR_BGR2GRAY),100,200)
return edge
#边界检测
img_gary = cv2.cvtColor(cv2_img,cv2.COLOR_BGR2GRAY)
edge = cv2.Canny(img_gary,100,200)
with col2:
st.image(cannyDet(cv2_img),'检测结果')
#image自动处理了二值文件
st.image(cv2_img)
运行效果: