图片与视频 #6
							
								
								
									
										45
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								main.py
									
									
									
									
									
								
							@@ -3,7 +3,7 @@ import cv2
 | 
				
			|||||||
import numpy as np
 | 
					import numpy as np
 | 
				
			||||||
from PyQt5.QtWidgets import (
 | 
					from PyQt5.QtWidgets import (
 | 
				
			||||||
    QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
 | 
					    QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
 | 
				
			||||||
    QLabel, QPushButton, QScrollArea, QFrame, QSizePolicy
 | 
					    QLabel, QPushButton, QScrollArea, QFrame, QSizePolicy,QFileDialog
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
from PyQt5.QtCore import QTimer, Qt, pyqtSignal, QThread
 | 
					from PyQt5.QtCore import QTimer, Qt, pyqtSignal, QThread
 | 
				
			||||||
from PyQt5.QtGui import QImage, QPixmap, QFont, QPainter, QPen, QColor
 | 
					from PyQt5.QtGui import QImage, QPixmap, QFont, QPainter, QPen, QColor
 | 
				
			||||||
@@ -206,7 +206,12 @@ class MainWindow(QMainWindow):
 | 
				
			|||||||
        self.start_button.clicked.connect(self.start_camera)
 | 
					        self.start_button.clicked.connect(self.start_camera)
 | 
				
			||||||
        self.stop_button.clicked.connect(self.stop_camera)
 | 
					        self.stop_button.clicked.connect(self.stop_camera)
 | 
				
			||||||
        self.stop_button.setEnabled(False)
 | 
					        self.stop_button.setEnabled(False)
 | 
				
			||||||
        
 | 
					        self.btn_image = QPushButton('选择图片')
 | 
				
			||||||
 | 
					        self.btn_video = QPushButton('选择视频')
 | 
				
			||||||
 | 
					        self.btn_image.clicked.connect(self.open_image_file)
 | 
				
			||||||
 | 
					        self.btn_video.clicked.connect(self.open_video_file)
 | 
				
			||||||
 | 
					        button_layout.addWidget(self.btn_image)
 | 
				
			||||||
 | 
					        button_layout.addWidget(self.btn_video)
 | 
				
			||||||
        button_layout.addWidget(self.start_button)
 | 
					        button_layout.addWidget(self.start_button)
 | 
				
			||||||
        button_layout.addWidget(self.stop_button)
 | 
					        button_layout.addWidget(self.stop_button)
 | 
				
			||||||
        button_layout.addStretch()
 | 
					        button_layout.addStretch()
 | 
				
			||||||
@@ -426,6 +431,42 @@ class MainWindow(QMainWindow):
 | 
				
			|||||||
            self.camera_thread.stop_camera()
 | 
					            self.camera_thread.stop_camera()
 | 
				
			||||||
        event.accept()
 | 
					        event.accept()
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					    def open_image_file(self):
 | 
				
			||||||
 | 
					        file_path, _ = QFileDialog.getOpenFileName(self, '选择图片', '', '图片文件 (*.jpg *.png)')
 | 
				
			||||||
 | 
					        if file_path:
 | 
				
			||||||
 | 
					            image = cv2.imread(file_path)
 | 
				
			||||||
 | 
					            self.process_image(image)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    def open_video_file(self):
 | 
				
			||||||
 | 
					        file_path, _ = QFileDialog.getOpenFileName(self, '选择视频', '', '视频文件 (*.mp4 *.avi)')
 | 
				
			||||||
 | 
					        if file_path:
 | 
				
			||||||
 | 
					            self.cap = cv2.VideoCapture(file_path)
 | 
				
			||||||
 | 
					            self.video_timer = QTimer()
 | 
				
			||||||
 | 
					            self.video_timer.timeout.connect(self.process_video_frame)
 | 
				
			||||||
 | 
					            self.video_timer.start(30)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    def process_image(self, image):
 | 
				
			||||||
 | 
					        self.detections = self.detector.detect_license_plates(image)
 | 
				
			||||||
 | 
					        display_image = self.draw_detections(image.copy())
 | 
				
			||||||
 | 
					        self.display_static_image(display_image)
 | 
				
			||||||
 | 
					        self.update_results_display()
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    def process_video_frame(self):
 | 
				
			||||||
 | 
					        ret, frame = self.cap.read()
 | 
				
			||||||
 | 
					        if ret:
 | 
				
			||||||
 | 
					            self.process_image(frame)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            self.video_timer.stop()
 | 
				
			||||||
 | 
					            self.cap.release()
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    def display_static_image(self, image):
 | 
				
			||||||
 | 
					        rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
 | 
				
			||||||
 | 
					        h, w, ch = rgb_image.shape
 | 
				
			||||||
 | 
					        bytes_per_line = ch * w
 | 
				
			||||||
 | 
					        qt_image = QImage(rgb_image.data, w, h, bytes_per_line, QImage.Format_RGB888)
 | 
				
			||||||
 | 
					        pixmap = QPixmap.fromImage(qt_image)
 | 
				
			||||||
 | 
					        self.camera_label.setPixmap(pixmap.scaled(self.camera_label.size(), Qt.KeepAspectRatio))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def main():
 | 
					def main():
 | 
				
			||||||
    app = QApplication(sys.argv)
 | 
					    app = QApplication(sys.argv)
 | 
				
			||||||
    window = MainWindow()
 | 
					    window = MainWindow()
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user