以下是基于Python OpenCV的代码,实现了对图像集合进行Canny边缘检测,并使用PyQt5创建了一个UI界面。该界面包括文件选择、Canny参数调整、图像显示和保存等功能,旨在使用户能够更方便地进行边缘检测操作。

import cv2
import numpy as np
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QLabel, QSlider, QVBoxLayout, QHBoxLayout, \
    QPushButton, QWidget


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.slider_low = QSlider(Qt.Horizontal)
        self.slider_low.setMinimum(0)
        self.slider_low.setMaximum(255)
        self.slider_low.setValue(50)
        self.slider_high = QSlider(Qt.Horizontal)
        self.slider_high.setMinimum(0)
        self.slider_high.setMaximum(255)
        self.slider_high.setValue(150)
        self.slider_low.valueChanged.connect(self.update_image)
        self.slider_high.valueChanged.connect(self.update_image)

        self.button_select = QPushButton('选择图片')
        self.button_select.clicked.connect(self.select_images)
        self.button_save = QPushButton('保存结果')
        self.button_save.clicked.connect(self.save_result)

        slider_layout = QVBoxLayout()
        slider_layout.addWidget(QLabel('阈值下限'))
        slider_layout.addWidget(self.slider_low)
        slider_layout.addWidget(QLabel('阈值上限'))
        slider_layout.addWidget(self.slider_high)

        button_layout = QHBoxLayout()
        button_layout.addWidget(self.button_select)
        button_layout.addWidget(self.button_save)

        main_layout = QVBoxLayout()
        main_layout.addWidget(self.image_label)
        main_layout.addLayout(slider_layout)
        main_layout.addLayout(button_layout)

        main_widget = QWidget()
        main_widget.setLayout(main_layout)
        self.setCentralWidget(main_widget)

        self.images = []
        self.result = None
        self.current_index = 0

    def select_images(self):
        file_dialog = QFileDialog(self)
        file_dialog.setFileMode(QFileDialog.ExistingFiles)
        file_dialog.setNameFilter('Images (*.png *.jpg *.bmp)')
        if file_dialog.exec_():
            file_names = file_dialog.selectedFiles()
            self.images = [cv2.imread(file_name) for file_name in file_names]
            self.current_index = 0
            self.update_image()

    def save_result(self):
        if self.result is not None:
            file_dialog = QFileDialog(self)
            file_dialog.setAcceptMode(QFileDialog.AcceptSave)
            file_dialog.setDefaultSuffix('png')
            file_dialog.setNameFilter('Images (*.png *.jpg *.bmp)')
            if file_dialog.exec_():
                file_name = file_dialog.selectedFiles()[0]
                cv2.imwrite(file_name, self.result)

    def update_image(self):
        if self.images and 0 <= self.current_index < len(self.images):
            image = self.images[self.current_index]
            gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
            edges = cv2.Canny(gray, self.slider_low.value(), self.slider_high.value())
            self.result = cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR)
            self.show_image(self.result)

    def show_image(self, image):
        height, width, channels = image.shape
        bytes_per_line = width * channels
        q_image = QImage(image.data, width, height, bytes_per_line, QImage.Format_RGB888)
        pixmap = QPixmap.fromImage(q_image).scaled(self.image_label.width(), self.image_label.height(),
                                                    Qt.KeepAspectRatio)
        self.image_label.setPixmap(pixmap)

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Left and self.current_index > 0:
            self.current_index -= 1
            self.update_image()
        elif event.key() == Qt.Key_Right and self.current_index < len(self.images) - 1:
            self.current_index += 1
            self.update_image()


if __name__ == '__main__':
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()
``
帮我写一段代码基于python opencv的对图像集合做canny边缘检测需要一个ui界面用pyqt5实现希望ui界面好看一点实现功能多一点

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

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