Initial commit

This commit is contained in:
2025-08-28 12:00:56 +08:00
commit edef40acd4
27 changed files with 1823 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
视频显示组件
用于显示视频帧和检测结果
"""
import cv2
import numpy as np
from PyQt5.QtWidgets import QLabel
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QImage, QPixmap, QPainter, QPen, QFont
class VideoWidget(QLabel):
"""视频显示组件"""
def __init__(self):
super().__init__()
self.setMinimumSize(640, 480)
self.setStyleSheet("border: 1px solid gray; background-color: black;")
self.setAlignment(Qt.AlignCenter)
self.setText("视频显示区域\n点击'开始检测'开始")
self.setScaledContents(True)
def update_frame(self, frame):
"""更新显示帧"""
if frame is None:
return
# 转换BGR到RGB
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
h, w, ch = rgb_frame.shape
bytes_per_line = ch * w
# 创建QImage
qt_image = QImage(rgb_frame.data, w, h, bytes_per_line, QImage.Format_RGB888)
# 转换为QPixmap并显示
pixmap = QPixmap.fromImage(qt_image)
# 缩放以适应widget大小保持宽高比
scaled_pixmap = pixmap.scaled(
self.size(),
Qt.KeepAspectRatio,
Qt.SmoothTransformation
)
self.setPixmap(scaled_pixmap)
def paintEvent(self, event):
"""绘制事件"""
super().paintEvent(event)
# 如果没有图像,显示提示文本
if not self.pixmap():
painter = QPainter(self)
painter.setPen(QPen(Qt.white))
painter.setFont(QFont("Arial", 16))
painter.drawText(self.rect(), Qt.AlignCenter, "视频显示区域\n点击'开始检测'开始")