PyQt5+QtDesigner编写摄像头界面程序(四)——用OpenCV和time读取和设置摄像头

本文详细介绍了如何使用PyQt5、QtDesigner和OpenCV实现摄像头图像的读取、显示、颜色控制、参数设置、保存图片和视频功能。通过启动和暂停按钮控制图像实时更新,利用OpenCV读取图像并调整颜色,同时提供了设置摄像头参数的选项,以及保存当前画面或录制视频的机制。

前言

上一节我们初步完成了主程序的结构设计,只要将每一个回调函数编写完成就可实现最终的功能了,本节来详细介绍这些回调函数的内容。由于设计到的回调函数较多,我们按功能将其分类,分别为摄像头图片的读取和显示、图像颜色控制、摄像头参数设置、视频文件保存、退出程序。

摄像头的读取和显示

从笔记本自带的摄像头中读取图片,并将其显示在我们命名为DispLb的label中。这一过程涉及到的‘开始’和‘暂停’两个按钮,我们预期的功能是当鼠标单击‘开始’按钮时,程序就不断地从摄像头读取图像,并将其实时显示在DispLb中,而一旦我们点击‘暂停’按钮,就停止从摄像头读取图像,DispLb中显示的图像也不再改变。当然,还涉及到一些其它控件的‘enable’或‘disable’。具体涉及到的回调函数包括‘开始’按钮的回调函数:StartCamera();‘暂停’按钮的回调函数: StopCamera();另外,由于我们是通过time函数来控制图像的重复读取,因此还需要它的回调函数
TimerOutFun();将图片通过DispLb显示出来的函数:DispImg()。这些函数的内容如下所示。

    def StartCamera(self):
        self.ShowBt.setEnabled(False)
        self.StopBt.setEnabled(True)
        self.RecordBt.setEnabled(True)
        self.GrayImgCkB.setEnabled(True)
        if self.GrayImgCkB.isChecked()==0:
            self.RedColorSld.setEnabled(True)
            self.RedColorSpB.setEnabled(True)
            self.GreenColorSld.setEnabled(True)
            self.GreenColorSpB.setEnabled(True)
            self.BlueColorSld.setEnabled(True)
            self.BlueColorSpB.setEnabled(True)
        self.ExpTimeSld.setEnabled(True)
        self.ExpTimeSpB.setEnabled(True)
        self.GainSld.setEnabled(True)
        self.GainSpB.setEnabled(True)
        self.BrightSld.setEnabled(True)
        self.BrightSpB.setEnabled(True)
        self.ContrastSld.setEnabled(True)
        self.ContrastSpB.setEnabled(True)
        self.RecordBt.setText('录像')

        self.Timer.start(1)
        self.timelb=time.clock()

StartCamera这个函数的主要功能就是它最后两行代码,self.Timer.start(1)用来启动计时器,计时周期为1ms,即每隔1ms程序会自动调用一次TimerOutFun。我们将图像的具体读取和显示放到TimerOutFun中,这样就可以实现图像的实时读取和显示了。StartCamera的前面那些代码是用来启用相机参数设置和‘暂停’按钮等控件,同时,停用‘开始’按钮。

    def StopCamera(self):
        if self.StopBt.text()=='暂停':
            self.StopBt.setText('继续')
            self.RecordBt.setText('保存')
            self.Timer.stop()
        elif self.StopBt.text()=='继续':
            self.StopBt.setText('暂停')
            self.RecordBt.setText('录像')
            self.Timer.start(1)

由于我们的‘暂停’和‘继续’功能是复用的

在 PyCharm 中使用 PyQt5 QtDesigner 时,遇到 `Process finished with exit code -1073741819 (0xC0000005)` 错误通常表示程序在运行过程中遇到了内存访问冲突或某些动态链接库(DLL)加载失败的问题。以下是可能导致该错误的常见原因及解决方法: ### 1. PyQt5Python 版本不兼容 确保安装的 PyQt5 版本与当前 Python 解释器版本兼容。例如,使用 Python 3.9 时应安装 PyQt5 的兼容版本。可以尝试卸载当前版本并安装稳定版本: ```bash pip uninstall PyQt5 pip install PyQt5==5.15.9 ``` ### 2. QtDesigner 插件路径配置错误 PyCharm 需要正确配置 QtDesigner 的路径,以便在设计界面时调用。在 PyCharm 中设置外部工具时,确保 `pyuic5.exe` `designer.exe` 的路径正确指向 PyQt5 安装目录下的 `Qt5\bin` 文件夹。例如: ``` C:\Users\YourUser\AppData\Local\Programs\Python\Python39\Scripts\pyuic5.exe C:\Users\YourUser\AppData\Local\Programs\Python\Python39\Scripts\designer.exe ``` ### 3. 缺少或损坏的 Visual C++ Redistributable 包 该错误可能由缺失或损坏的 Visual C++ 运行库引起。建议安装或修复 **Microsoft Visual C++ Redistributable Package (x64 或 x86)**,尤其是适用于 Visual Studio 2015、2017、2019 2022 的版本。 ### 4. PyQt5 与第三方库冲突 某些情况下,PyQt5 与其他库(如 NumPy、OpenCV)之间可能存在兼容性问题。尝试在一个干净的虚拟环境中仅安装 PyQt5 必要的依赖,以排除冲突: ```bash python -m venv venv venv\Scripts\activate pip install PyQt5 ``` ### 5. 使用 PyInstaller 打包后的兼容性问题(如涉及) 如果涉及打包操作,确保使用最新版本的 PyInstaller,并在打包时添加必要的隐藏依赖项。例如: ```bash pip install pyinstaller --upgrade pyinstaller --hidden-import=PyQt5.sip --hidden-import=PyQt5.QtCore --hidden-import=PyQt5.QtGui your_script.py ``` ### 6. 检查 QtDesigner 的 `.ui` 文件加载方式 在代码中加载 `.ui` 文件时,应使用 `uic` 模块正确加载,避免直接导入生成的 `.py` 文件导致的问题。例如: ```python from PyQt5 import uic from PyQt5.QtWidgets import QApplication, QWidget import sys class MyWindow(QWidget): def __init__(self): super().__init__() uic.loadUi('your_file.ui', self) if __name__ == '__main__': app = QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_()) ``` ### 7. 更新显卡驱动操作系统补丁 有时,图形界面相关的错误可能与显卡驱动或操作系统版本有关。确保系统已安装最新的显卡驱动程序 Windows 更新。 ### 8. 检查杀毒软件或防火墙干扰 某些杀毒软件或防火墙可能会阻止 PyQt5 的某些组件正常运行。尝试暂时禁用这些程序,查看问题是否仍然存在。 ### 9. 使用兼容模式运行 在 PyCharm 中尝试以兼容模式运行程序。右键点击 PyCharm 快捷方式,选择“以兼容模式运行”或“以管理员身份运行”。 ###
评论 463
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值