首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于 PyQt5 和 OpenCV 的智能监控系统

基于 PyQt5 和 OpenCV 的智能监控系统

原创
作者头像
技术文章分析
发布2025-09-21 14:36:29
发布2025-09-21 14:36:29
9000
代码可运行
举报
文章被收录于专栏:技术技术
运行总次数:0
代码可运行

前期准备

  1. 安装必要的库:确保你已经安装了PyQt5和OpenCV-Python。可以通过pip来安装这些库: bash深色版本pip install pyqt5 opencv-python
  2. 摄像头权限:确保你的开发环境能够访问摄像头。对于大多数桌面操作系统,这通常意味着你需要给予应用程序相应的权限。

项目结构

  • main.py - 主程序入口。
  • ui_mainwindow.py - 使用Qt Designer设计的GUI界面文件转换而来(可选)。
  • camera_feed.py - 处理摄像头视频流的类。
  • motion_detector.py - 实现运动检测逻辑的模块。

示例代码概览

1. 创建主窗口 (main.py)
代码语言:javascript
代码运行次数:0
运行
复制
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import QTimer
from ui_mainwindow import Ui_MainWindow
from camera_feed import CameraFeed

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        
        # 初始化CameraFeed对象
        self.camera_feed = CameraFeed()
        
        # 设置定时器更新帧
        self.timer = QTimer()
        self.timer.timeout.connect(self.update_frame)
        self.timer.start(30) # 每30ms刷新一次
        
    def update_frame(self):
        frame = self.camera_feed.get_frame()
        # 这里应该有代码将frame显示在UI的一个标签上,例如使用QImage和QPixmap
        pass
MAP.ALTERA-HX.COM92丨LVYIN.JUESAI.MOBI89丨SAISHI.GZYDJDGC.COM15丨M.BOKEZHI.COM31
ZB.ZYZXHM.COM86丨ZUQIU.DIJIUXIAOXUE.COM84丨PRETTY.HZOTO.CN24丨QQ.51NJLAW.COM67
YES.QZSYHB.CN76丨ZB.WEISHENGMM.COM35丨M.CHANGTAI333.COM52丨MAP.BOKEZHI.COM35
24K.WZBJGS.CN69丨WWW.IPASC.CN20丨VIP.91YOUYU.CN58丨TV.YHTGBXY.ORG.CN73
QQ.JPPKIUEDU.COM86丨WWW.SZQIANBAIDUN.COM70丨SINA.SCZHMC.COM41丨R.DKQ.INFO29
FREE.DDHT888.COM36丨XIJIA.PYACKQ.COM45丨TV.SHKYBZ.CN55丨TV.YUSHA168.COM59
FREE.ZYZJZD.CN18丨24K.BOKEZHI.COM77丨LVYIN.PYACKQ.COM70丨SHARE.ANLANGONGSI.COM19
BOLL.28BAIKE.COM12丨FOOTBALL.XLSY.CN44丨SAISHI.CDWCT56.CN81丨ZHIBO.DIJIUXIAOXUE.COM91
VIP.JIAOFEIYI.NET98丨SINA.HONGDA0536.CN89丨CCTV.PSAZDZZ.COM75丨ZHIBO.LYGFGBJ.COM48
YES.76ZHIBO.CN25丨SINA.CHINAHBI.CN60丨DGBLJZ.COM31丨JSRQAZ.COM41
NBA.CDIPD.COM82丨ZHIBO.HONGDA0536.CN59丨ZUQIU.UHANDAN.CN62丨SJB.CQYGFK.COM51
LIVE.CQYBES.COM31丨CCTV.GYZXSJ.COM29丨YES.NMFZTD.ORG.CN64丨ONLINE.ZKAFX120.COM14
BOLL.ENDYEDU.COM48丨SINA.FJZB3.COM46丨FOOTBALL.SDDXF.CN80丨WAP.ZC1976.COM28
CCTV.76ZHIBO.CN96丨SAISHI.UP-ART.COM.CN25丨VIP.QIRUI4.COM72丨SHIJIEBEI.XCHW.NET55
ZHIBO.CYDDW.CN93丨ZHIBO.BOTIANQI.COM75丨FOOTBALL.HONGDA0536.CN70丨WAP.JXYBGC.COM51
F.KQW.INFO26丨JS-SJL.CN26丨LVYIN.CDWJQX.CN76丨WAP.91YOUYU.CN93
LVYIN.YUYOUKE.NET30丨ZHIBO8.KEZINI.CN35丨QQ.ANLANGONGSI.COM75丨MAP.LYGFGBJ.COM76
BOLL.TJBD120.COM35丨BOLL.JNSDPMJ.COM77丨MAP.YLDF120.COM62丨MAP.JXLGDL.COM86
FOOTBALL.TUMAIW.COM28丨PRETTY.LYGFGBJ.COM28丨ZB.JSRQAZ.COM52丨FOOTBALL.SIBICHENG.NET63
ONLINE.CZCGYY.COM86丨CCTV.ZDJJH.COM51丨WAP.WEISHENGMM.COM88丨24K.DDIANSHANG.COM90    
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
2. 实现摄像头视频处理 (camera_feed.py)
代码语言:javascript
代码运行次数:0
运行
复制
python深色版本import cv2

class CameraFeed:
    def __init__(self):
        self.video_capture = cv2.VideoCapture(0) # 打开默认摄像头
    
    def get_frame(self):
        ret, frame = self.video_capture.read()
        if ret:
            # 在这里可以对每一帧进行处理,比如调用motion_detector中的方法
            return frame
        else:
            return None
    
    def __del__(self):
        self.video_capture.release() # 确保释放资源
3. 实现运动检测 (motion_detector.py)
代码语言:javascript
代码运行次数:0
运行
复制
python深色版本import cv2

class MotionDetector:
    def __init__(self):
        self.prev_frame = None
    
    def detect_motion(self, current_frame):
        gray_frame = cv2.cvtColor(current_frame, cv2.COLOR_BGR2GRAY)
        gray_frame = cv2.GaussianBlur(gray_frame, (21, 21), 0)
        
        if self.prev_frame is None:
            self.prev_frame = gray_frame
            return False, current_frame
            
        frame_delta = cv2.absdiff(self.prev_frame, gray_frame)
        thresh = cv2.threshold(frame_delta, 25, 255, cv2.THRESH_BINARY)[1]
        thresh = cv2.dilate(thresh, None, iterations=2)
        contours, _ = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        
        motion_detected = False
        for contour in contours:
            if cv2.contourArea(contour) < 500: # 忽略小变动
                continue
            motion_detected = True
            (x, y, w, h) = cv2.boundingRect(contour)
            cv2.rectangle(current_frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
            
        self.prev_frame = gray_frame
        return motion_detected, current_frame

集成

CameraFeed类中集成MotionDetector以实现实时运动检测:

代码语言:javascript
代码运行次数:0
运行
复制
python深色版本# 在camera_feed.py中导入MotionDetector
from motion_detector import MotionDetector

class CameraFeed:
    def __init__(self):
        self.video_capture = cv2.VideoCapture(0)
        self.motion_detector = MotionDetector()
    
    def get_frame(self):
        ret, frame = self.video_capture.read()
        if ret:
            motion_detected, processed_frame = self.motion_detector.detect_motion(frame)
            return processed_frame
        else:
            return None

此示例提供了一个基础框架,你可以根据需要添加更多功能,如保存检测到的事件、发送通知等。此外,还可以探索更复杂的计算机视觉算法来增强系统的智能性。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前期准备
  • 项目结构
  • 示例代码概览
    • 1. 创建主窗口 (main.py)
    • 2. 实现摄像头视频处理 (camera_feed.py)
    • 3. 实现运动检测 (motion_detector.py)
  • 集成
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档