以下是一个基于Python OpenCV和PyQt5的图像集合Canny边缘检测代码,包含了一个UI界面,可以实现图片和视频的Canny边缘检测,并提供阈值上下限的控制:

import sys
import cv2
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow, QSlider, QVBoxLayout, QWidget


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

        # 创建UI界面
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)

        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_low.setTickPosition(QSlider.TicksBelow)
        self.slider_low.setTickInterval(10)

        self.slider_high = QSlider(Qt.Horizontal)
        self.slider_high.setMinimum(0)
        self.slider_high.setMaximum(255)
        self.slider_high.setValue(150)
        self.slider_high.setTickPosition(QSlider.TicksBelow)
        self.slider_high.setTickInterval(10)

        vbox = QVBoxLayout(self.central_widget)
        vbox.addWidget(self.image_label)
        vbox.addWidget(self.slider_low)
        vbox.addWidget(self.slider_high)

        # 绑定事件
        self.slider_low.valueChanged.connect(self.update_image)
        self.slider_high.valueChanged.connect(self.update_image)

        # 加载图像集合
        self.images = []
        self.images.append(cv2.imread('image1.jpg'))
        self.images.append(cv2.imread('image2.jpg'))
        self.images.append(cv2.imread('image3.jpg'))

        self.current_index = 0
        self.update_image()

    def update_image(self):
        # 获取当前阈值
        low_threshold = self.slider_low.value()
        high_threshold = self.slider_high.value()

        # 对当前图像进行Canny边缘检测
        image = self.images[self.current_index]
        edges = cv2.Canny(image, low_threshold, high_threshold)

        # 将检测结果转换为QImage格式并显示
        height, width, channel = edges.shape
        bytes_per_line = channel * width
        q_image = QImage(edges.data, width, height, bytes_per_line, QImage.Format_Grayscale8)
        pixmap = QPixmap.fromImage(q_image)
        self.image_label.setPixmap(pixmap)

    def keyPressEvent(self, event):
        # 处理左右方向键切换图像
        if event.key() == Qt.Key_Left:
            self.current_index = max(0, self.current_index - 1)
            self.update_image()
        elif event.key() == Qt.Key_Right:
            self.current_index = min(len(self.images) - 1, self.current_index + 1)
            self.update_image()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

在这个代码中,我们首先创建了一个QMainWindow类,作为UI界面的主要容器。然后我们在其中添加了一个QLabel控件来显示图像,以及两个QSlider控件来控制Canny算法的阈值。我们将这些控件使用QVBoxLayout布局进行排列,并绑定了valueChanged事件来实时更新图像。

update_image函数中,我们首先获取当前的阈值,并对当前图像进行Canny边缘检测。然后我们将检测结果转换为QImage格式,并通过QPixmap将其渲染到QLabel上。

最后,在keyPressEvent函数中,我们处理了左右方向键来切换图像,以便用户可以在图像集合中进行浏览。

需要注意的是,本代码仅提供了一个简单的UI界面和Canny算法的实现,如果需要更加复杂的功能和更高的性能,需要进一步优化和改进

帮我写一段代码里面基于python opencv的对图像集合做canny边缘检测需要一个ui界面用pyqt5实现希望ui界面功能多 界面精美并且可以实现图片和视频的canny边缘检测ui界面设置阈值上下限的控制

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

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