基于pyqt5的简易目标检测UI
没选图像的时候:
被否决的一个系统,也不过多介绍了,留个记录吧,之后可以看看优化一下,也不白写代码。
代码:
from ultralytics import YOLO
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QLabel, QPushButton, QHBoxLayout,QVBoxLayout, QWidget
from PyQt5.QtGui import QPixmap,QImage
import sys
import cv2
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建一个QWidget,作为主窗口的中心部件
widget = QWidget(self)
self.setCentralWidget(widget)
# 创建一个水平布局,添加到中心部件
layout = QHBoxLayout()
widget.setLayout(layout)
# 创建一个垂直布局,添加到水平布局
layout_left = QVBoxLayout()
layout.addLayout(layout_left)
# 创建一个QLabel,用于显示原始图片
self.label_original = QLabel(self)
layout_left.addWidget(self.label_original)
# 创建一个QPushButton,用于选择图片
self.button_open = QPushButton("Open", self)
self.button_open.clicked.connect(self.open_file)
layout_left.addWidget(self.button_open)
# 创建另一个垂直布局,添加到水平布局
layout_right = QVBoxLayout()
layout.addLayout(layout_right)
# 创建一个QLabel,用于显示处理后的图片
self.label_processed = QLabel(self)
layout_right.addWidget(self.label_processed)
# 创建一个QPushButton,用于处理图片
self.button_process = QPushButton("Process", self)
self.button_process.clicked.connect(self.process_image)
layout_right.addWidget(self.button_process)
self.model= YOLO('best.pt')
def open_file(self):
# 打开文件对话框,选择图片
file_name, _ = QFileDialog.getOpenFileName(self, "Open Image", "", "Images (*.png *.xpm *.jpg)")
# 如果选择了图片,则显示
if file_name:
pixmap = QPixmap(file_name)
# 调整QLabel的尺寸为图片的尺寸
self.label_original.resize(pixmap.width(), pixmap.height())
self.label_original.setPixmap(pixmap)
self.src=file_name
def process_image(self):
results = self.model(self.src)
annotated_frame = results[0].plot()
img_rgb = cv2.cvtColor(annotated_frame, cv2.COLOR_BGR2RGB)
qimg = QImage(img_rgb.data, img_rgb.shape[1], img_rgb.shape[0], QImage.Format_RGB888)
pixmap = QPixmap.fromImage(qimg)
self.label_processed.setPixmap(pixmap)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())