文章目录
- 概要
- 效果图
- 整体架构流程
- 技术细节
概要
本代码是一个简单的GUI应用程序,用于瓶装液位检测系统。
效果图
整体架构流程
整体架构流程如下:
-
创建GUI窗口和必要的部件:
- 创建一个主窗口(
root
)作为GUI应用程序的容器。 - 设置窗口的大小和标题。
- 创建用于显示图像的
Label
部件(img_label
)。 - 创建用于显示检测结果的
Label
部件(result_label
)。 - 创建用于加载图片的按钮(
load_button
)。 - 创建用于执行液位检测的按钮(
detect_button
)。
- 创建一个主窗口(
-
加载图片:
- 当用户点击"加载图片"按钮时,触发
load_image()
函数。 - 在函数中,使用文件对话框选择一个瓶子的图片文件。
- 如果选择了文件,则读取图片,将其从BGR颜色空间转换为RGB颜色空间,并将其显示在GUI窗口中。
- 当用户点击"加载图片"按钮时,触发
-
液位检测:
- 当用户点击"液位检测"按钮时,触发
detect_liquid()
函数。 - 在函数中,首先将图像转换为灰度图像。
- 对灰度图像进行二值化处理,得到黑白二值图像。
- 使用轮廓检测函数找到图像中的轮廓。
- 找到最大的轮廓,表示瓶子的轮廓。
- 计算轮廓的面积和外接矩形的面积。
- 根据面积比例判断液位是否充足,并更新检测结果的文本显示。
- 当用户点击"液位检测"按钮时,触发
-
运行GUI应用程序:
- 调用
root.mainloop()
函数,启动GUI应用程序的主循环。 - 程序将等待用户交互事件,如按钮点击或窗口关闭事件。
- 调用
用户可以通过点击"加载图片"按钮选择一张瓶子的图片,然后点击"液位检测"按钮进行液位检测。检测结果将显示在GUI窗口中的检测结果区域。整体架构流程使用户能够方便地加载图片并执行液位检测操作,并即时显示结果。
技术细节
-
导入必要的模块:
cv2
:OpenCV库,用于图像处理和计算机视觉任务。numpy
:用于数值计算和数组操作。tkinter
:Python的标准GUI库,用于创建GUI应用程序。filedialog
:tkinter的子模块,用于打开文件对话框选择图片文件。PIL
:Python Imaging Library,用于图像处理和操作。
-
创建GUI窗口:
- 创建一个名为
root
的Tk对象,作为主窗口。 - 设置窗口的大小为800x600像素。
- 设置窗口的标题为"瓶装液位检测系统"。
- 创建一个名为
-
图像显示区域:
- 创建一个
Label
部件,用于显示图像。 - 将该部件放置在窗口的左侧。
- 创建一个
-
检测结果显示区域:
- 创建一个
Label
部件,用于显示检测结果的文本。
- 创建一个
-
加载图片并显示:
- 定义一个
load_image()
函数,用于加载并显示图片。 - 在函数中,通过文件对话框(
filedialog
)选择一个图片文件。 - 如果选择了文件,则使用OpenCV的
imread()
函数读取图片。 - 将读取的图片从BGR颜色空间转换为RGB颜色空间。
- 使用PIL库的
Image.fromarray()
函数将图像转换为PIL图像对象。 - 使用PIL库的
ImageTk.PhotoImage()
函数将PIL图像对象转换为可显示的图像对象。 - 通过配置
img_label
部件的image
属性,将图像显示在GUI窗口中。
- 定义一个
-
液位检测:
- 定义一个
detect_liquid()
函数,用于执行液位检测。 - 在函数中,首先将图像转换为灰度图像。
- 然后对灰度图像进行二值化处理,将图像转换为黑白二值图像。
- 使用OpenCV的
findContours()
函数找到图像中的轮廓。 - 找到最大的轮廓,即代表瓶子的轮廓。
- 计算轮廓的面积和外接矩形的面积。
- 根据面积比例判断液位是否充足,并更新检测结果的文本。
- 定义一个
-
加载图片按钮:
- 创建一个
Button
部件,用于触发加载图片的操作。 - 按钮上显示的文本为"加载图片"。
- 按钮点击后执行
load_image()
函数。
- 创建一个
-
液位检测按钮:
- 创建一个
Button
部件,用于触发液位检测的操作。 - 按钮上显示的文本为"液位检测"。
- 按钮点击后执行
detect_liquid()
函数。
- 创建一个
-
运行GUI应用程序:
- 调用
root.mainloop()
函数,启动GUI应用程序的主循环,等待用户交互事件。
- 调用