这段代码实现了使用Python和PyQt库构建的Canny边缘检测工具,可以用于对图像进行边缘检测,并可调整阈值参数以优化检测结果。

代码解析

  • 首先导入必要的库:cv2用于图像处理,numpy用于数值计算,PyQt5用于构建GUI界面。
  • 定义MainWindow类,继承自QMainWindow,作为主窗口。
  • __init__方法中初始化窗口的基本属性,包括标题、大小、图像显示标签、阈值调节滑块、选择图片按钮、保存结果按钮。
  • select_images方法用于打开文件对话框,选择图片文件。
  • save_result方法用于保存处理后的结果图像。
  • update_image方法用于根据当前选择的图像和阈值参数进行Canny边缘检测,并将结果显示在图像标签中。
  • show_image方法用于将图像数据转换为QPixmap并显示在标签中。
  • keyPressEvent方法处理键盘事件,实现左右箭头切换图像功能。

问题解决

您遇到的问题可能是因为在选择图像时,文件对话框被销毁导致的。可以尝试将文件对话框声明为实例变量,而不是在方法中创建它。修改代码如下:

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Canny边缘检测')
        self.setGeometry(100, 100, 800, 600)
        self.image_label = QLabel()
        self.image_label.setAlignment(Qt.AlignCenter)

        # ...
        
        self.file_dialog = QFileDialog(self)  # 将文件对话框声明为实例变量

    def select_images(self):
        self.file_dialog.setFileMode(QFileDialog.ExistingFiles)
        self.file_dialog.setNameFilter('Images (*.png *.jpg *.bmp)')
        if self.file_dialog.exec_():  # 使用实例变量调用exec_()方法
            file_names = self.file_dialog.selectedFiles()
            # ...

这样就可以在选择图像后保留文件对话框,避免自动消失的问题。

使用说明

  1. 运行代码。
  2. 点击“选择图片”按钮,选择要进行边缘检测的图像。
  3. 使用阈值滑块调整下限和上限,观察边缘检测效果。
  4. 点击“保存结果”按钮,保存处理后的图像。
  5. 使用左右箭头键切换不同的图像进行处理。
Canny边缘检测工具 - Python PyQt 实现

原文地址: https://www.cveoy.top/t/topic/ntxW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录