这是一个使用 Python OpenCV 和 PyQt5 构建的 Canny 边缘检测器,它具有一个功能丰富的 UI,可用于处理图像和视频。应用程序允许用户选择文件、调整参数并实时查看结果。

安装库

首先,需要安装必要的库和工具。使用 pip 安装 Python、OpenCV 和 PyQt5:

pip install opencv-python pyqt5

核心代码

以下代码示例展示了如何使用 OpenCV 的 Canny 边缘检测算法对图像进行处理:

import cv2

# 加载图像
img = cv2.imread('image.jpg')

# 处理图像
edges = cv2.Canny(img, 100, 200)

# 显示结果
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

PyQt5 UI

现在,我们将这个代码片段整合到一个 PyQt5 应用程序中,创建交互式 UI:

from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QSlider, QPushButton, QFileDialog
from PyQt5.QtGui import QPixmap
import cv2

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        # 创建 UI
        self.initUI()

    def initUI(self):
        # 添加文件选择按钮
        self.file_btn = QPushButton('选择文件', self)
        self.file_btn.move(20, 20)
        self.file_btn.clicked.connect(self.file_dialog)

        # 添加第一个滑块(阈值 1)
        self.slider1 = QSlider(self)
        self.slider1.setOrientation(1)  # 垂直方向
        self.slider1.setGeometry(20, 60, 30, 200)
        self.slider1.setMinimum(0)
        self.slider1.setMaximum(255)
        self.slider1.setValue(100)

        # 添加第二个滑块(阈值 2)
        self.slider2 = QSlider(self)
        self.slider2.setOrientation(1)  # 垂直方向
        self.slider2.setGeometry(60, 60, 30, 200)
        self.slider2.setMinimum(0)
        self.slider2.setMaximum(255)
        self.slider2.setValue(200)

        # 添加图像显示区域
        self.label = QLabel(self)
        self.label.setGeometry(100, 20, 400, 400)

        # 设置窗口大小和标题
        self.setGeometry(100, 100, 520, 440)
        self.setWindowTitle('Canny 边缘检测器')

    def file_dialog(self):
        # 打开文件选择对话框
        fname = QFileDialog.getOpenFileName(self, '选择文件', '.', 'Image files (*.jpg *.png)')

        if fname[0]:
            # 加载图像
            img = cv2.imread(fname[0])

            # 处理图像
            edges = cv2.Canny(img, self.slider1.value(), self.slider2.value())

            # 显示处理后的图像
            pixmap = QPixmap.fromImage(cv2.cvtColor(edges, cv2.COLOR_BGR2RGB))
            self.label.setPixmap(pixmap)


if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

扩展功能

为了实现更多功能和更复杂的 UI,可以进行以下扩展:

  • 视频处理: 使用 cv2.VideoCapture() 加载视频,并在 UI 中显示实时边缘检测结果。
  • 保存结果: 添加按钮以将处理后的图像或视频保存到磁盘。
  • 参数调整: 添加更多滑块或输入框,以便更精细地控制 Canny 算法参数。
  • 图像预览: 在选择文件后,在 UI 中显示原始图像的预览。
  • 自定义颜色: 允许用户选择边缘检测结果的颜色。

通过这些扩展功能,你可以构建一个强大且灵活的 Canny 边缘检测工具。

Python OpenCV Canny 边缘检测器:带 PyQt5 UI 的图像和视频处理

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

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