Pyqt5+Opencv实现摄像头图像的实时读取并显示

这篇具有很好参考价值的文章主要介绍了Pyqt5+Opencv实现摄像头图像的实时读取并显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

本文主要讲解如何使用Pyqt5+opencv实现摄像头图像的读取,并且将其在Label上进行实时显示。

一、Qt中的Timer

QTimer在界面中不可见,在UI设计器中也找不到它,只能通过纯代码实现,主要作用是定时特定的时间。

想要掌握QTimer只需掌握setInterval(设置定时时间,单位ms)、start(启动定时器),和定时时间到时所发出的信号timeout()即可。程序设计的思路:

1.先设定定时周期

2.绑定timeout()信号到自定义槽函数

3.调用start函数启动定时器

二、使用步骤

1.使用Qt-designer设计界面

先使用qt-designer设计一个只有一个label和button的界面。

Pyqt5+Opencv实现摄像头图像的实时读取并显示
可以在终端切换到该ui文件的目录下输入以下命令:

pyuic5 -o ui_test.py test.ui

即可将界面ui文件转换成对应的py文件

2.功能代码的设计

2.1 自定义变量

#定时器
self.timer = QtCore.QTimer()
#摄像头
self.cap_video=0
#记录定时器工作状态
self.flag = 0
#存放每一帧读取的图像
self.img = []

2.2 label上显示图像函数

def show_cv_img(self, img):
    shrink = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    QtImg = QtGui.QImage(shrink.data,
                         shrink.shape[1],
                         shrink.shape[0],
                         shrink.shape[1] * 3,
                         QtGui.QImage.Format_RGB888)
    jpg_out = QtGui.QPixmap(QtImg).scaled(
        self.label.width(), self.label.height())

    self.label.setPixmap(jpg_out)

2.3 信号与槽的建立

#将定时器(Timer)和显示视频函数进行信号与槽的连接
self.timer.timeout.connect(self.show_viedo)

def show_viedo(self):
    ret, self.img = self.cap_video.read()
    if ret:
        self.show_cv_img(self.img)

2.4编写定时器的启动函数并且与pushbutton建立信号与槽

self.pushButton.clicked.connect(self.video_button)
def video_button(self):
    if (self.flag == 0):
        self.cap_video = cv2.VideoCapture(0)
        self.timer.start(50);
        self.flag+=1
        self.pushButton.setText("Close")
    else:
        self.timer.stop()
        self.cap_video.release()
        self.label.clear()
        self.pushButton.setText("Open")
        self.flag=0

3.功能代码总体结构

import ui_test
from PyQt5.QtWidgets import *
import cv2
from PyQt5 import QtCore, QtGui, QtWidgets

class test_ui(QMainWindow, ui_test.Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.show_viedo)
        self.pushButton.clicked.connect(self.video_button)
        self.cap_video=0
        self.flag = 0
        self.img = []

    def video_button(self):
        if (self.flag == 0):
            self.cap_video = cv2.VideoCapture(0)
            self.timer.start(50);
            self.flag+=1
            self.pushButton.setText("Close")
        else:
            self.timer.stop()
            self.cap_video.release()
            self.label.clear()
            self.pushButton.setText("Open")
            self.flag=0
    def show_viedo(self):
        ret, self.img = self.cap_video.read()
        if ret:
            self.show_cv_img(self.img)
    def show_cv_img(self, img):
        shrink = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        QtImg = QtGui.QImage(shrink.data,
                             shrink.shape[1],
                             shrink.shape[0],
                             shrink.shape[1] * 3,
                             QtGui.QImage.Format_RGB888)
        jpg_out = QtGui.QPixmap(QtImg).scaled(
            self.label.width(), self.label.height())

        self.label.setPixmap(jpg_out)
if __name__ == "__main__":

    app = QApplication(sys.argv)
    win = test_ui()
    win.show()
    sys.exit(app.exec_())

运行该代码便可以直接看见我们的界面如下:Pyqt5+Opencv实现摄像头图像的实时读取并显示
然后,点击video便可以等待打开摄像头显示动态图像了!Pyqt5+Opencv实现摄像头图像的实时读取并显示
然后点击close便可以关闭摄像头显示,后续继续点击open任然可以继续读取摄像头。


总结

以上就是pyqt5+opencv读取摄像头的全部方法了,实现了在label上进行摄像头读取图像的实时显示。新手不易,希望大家多多支持,有问题评论交流一起进步。

参考链接
c++版qt+opencv实现摄像头图像读取并显示
Timer用法文章来源地址https://www.toymoban.com/news/detail-440351.html

到了这里,关于Pyqt5+Opencv实现摄像头图像的实时读取并显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Python] pyqt6+opencv实现摄像头图像的实时读取并显示(完整源代码)

    本文将会介绍如何通过opencv来实时捕获摄像头的图像,并通过pyqt6进行图像视频呈现。 1. 通过opencv的VideoCapture类读取摄像头的每一帧图像,通过pyqt6的QLabel来显示图像 2. 根据获取的图像的宽和高大小以及QLabel的大小来动态调整最后输出的图像的宽和高 3. 调整窗体大小,动态调

    2024年01月24日
    浏览(74)
  • PyQt5学习笔记--摄像头实时视频展示、多线程处理、视频编解码

    目录 1--前言 2--基于Qt Designer设计ui文件 3--视频的编解码操作 4--完整代码 5--结果展示 6--存在的问题 7--参考 ① 创建两个线程, 主线程 为ui线程, 子线程 用于读取摄像头视频,将处理后的图像帧数据(处理操作可以人为添加)返回到主线程进行可视化; ② 子线程向主线程传

    2023年04月09日
    浏览(49)
  • 小白教程:PyQt5点击按钮,调用笔记本电脑摄像头将实时画面显示在label控件上,并且使用UI代码和逻辑代码分开的方式

    能力一般,水平有限,真心欢迎批评指正!以后会不断完善修改,如果对你有帮助欢迎点赞收藏! 小白教程,当我们掌握了一点点的Qt Designer的技能,得意于能够在界面上作画的时候,怎么编写其中的逻辑关系是我们进一步想要了解的,下面介绍了 点击按钮--调用笔记本电脑

    2024年01月17日
    浏览(94)
  • PyQt5摄像头的使用--摄像头操作概述及使用摄像头拍照

    1、功能概述 PyQt5多媒体模块为摄像头操作提供了几个类,可以用于获取摄像头设备信息,通过摄像头进行拍照和录像。 Qt多媒体模块的功能实现是依赖于平台的。在Windows平台上,Qt多媒体模块依赖于两个插件:一个是使用Microsoft DirectShow API的插件,DirectShow在Windows 98引入,在

    2024年02月05日
    浏览(51)
  • Pyqt5打开电脑摄像头进行拍照

    目录 1、设计UI界面 2、设计逻辑代码,建立连接显示窗口 3、结果 1、设计UI界面 将ui界面转为py文件后获得的逻辑代码为:(文件名为  Camera.py ) 2、设计逻辑代码,建立连接显示窗口 逻辑代码如下:(文件名为 Camera_main.py ) 3、结果 参考:暂未成功人士

    2024年02月12日
    浏览(50)
  • VC++中使用OpenCV读取图像、读取本地视频、读取摄像头并实时显示

    最近闲着跟着油管博主murtazahassan,学习了一下LEARN OPENCV C++ in 4 HOURS | Including 3x Projects | Computer Vision,对应的Github源代码地址为:Learn-OpenCV-cpp-in-4-Hours OpenCV是一个开源的计算机视觉库,其官网地址为:https://opencv.org/,对应Github源码地址为:https://github.com/opencv/opencv,目前来说

    2024年01月17日
    浏览(60)
  • 使用PYQT5打开电脑摄像头并进行拍照

    目录 1 UI界面的布局 2 UI界面布局对应的代码 3 打开电脑摄像头等功能的完整代码 4 一些代码函数和优化界面代码 5 最终效果 下图是简单设计的一个UI控制的输出可视化界面。       其中, 摄像头图片显示 使用的是左边功能的 label 类、 打开摄像头拍照关闭摄像头导出图片

    2023年04月21日
    浏览(48)
  • 使用 MFC 和 OpenCV 实现实时摄像头视频显示

    1、引言 MFC 是一个在 Windows 平台上编写 C++ 应用程序的库,提供了丰富的用户界面功能。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,包含了丰富的图像处理和计算机视觉功能。本文将向大家展示如何将这两个库结合起来,实现一个实时显示摄像头画面的简

    2024年02月13日
    浏览(98)
  • OpenCV实现摄像头图像分类(Python版)

    先安装MMEdu库! MMEdu安装:https://blog.csdn.net/zyl_coder/article/details/132483865 下面的代码请在Jupyter上运行,并自己准备数据集。若模型还未训练,请先在本地训练完模型后再进行模型推理。  注意:1.因为我们是面对摄像头的,所以通过flip对摄像头获得的内容做了左右镜像;    

    2024年02月11日
    浏览(36)
  • PC电脑实时接收树莓派摄像头图像数据并显示(Python实现)

    目录 一、任务概述 二、环境安装 三、实现 3.1 上位机端(PC服务器端) 3.2 树莓派端(客户请求端) 四、运行效果 最近在做一个树莓派自动驾驶小车,上位机使用windows10 PC电脑,下位机小车采用树莓派4B,树莓派上安装了USB免驱摄像头。上位机通过SSH来控制和分析树莓派小车

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包