PyQt5 + Python-Opencv 打开摄像头

声明:这只是简简单单地打开摄像头显示图片的代码。

ui代码(直接用Qt Designer设计的):

要用的库全放ui代码里了,就不放在实现代码里了,直接两段代码黏一起就可运行。

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtGui import QImage, QPixmap
import cv2
import sys

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(753, 629)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(210, 520, 93, 28))
        self.pushButton.setObjectName("pushButton")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(60, 20, 640, 480))
        self.label.setFrameShape(QtWidgets.QFrame.WinPanel)
        self.label.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.label.setText("")
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(440, 520, 93, 28))
        self.pushButton_2.setObjectName("pushButton_2")
        self.label.raise_()
        self.pushButton.raise_()
        self.pushButton_2.raise_()
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 753, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "打开摄像头"))
        self.pushButton_2.setText(_translate("MainWindow", "关闭摄像头"))

实现代码:

class Open_Camera(QtWidgets.QMainWindow,Ui_MainWindow):
    def __init__(self):
        super(Open_Camera,self).__init__()
        self.setupUi(self) #创建窗体对象
        self.init()
        self.cap = cv2.VideoCapture(0,cv2.CAP_DSHOW) #摄像头
    def init(self):
        #定时器让其定时读取显示图片
        self.camera_timer = QTimer()
        self.camera_timer.timeout.connect(self.show_image)
        #打开摄像头
        self.pushButton.clicked.connect(self.open_camera)
        #关闭摄像头
        self.pushButton_2.clicked.connect(self.close_camera)
    '''开启摄像头'''
    def open_camera(self):
        if self.cap.isOpened():
            self.camera_timer.start(40) #每40毫秒读取一次,即刷新率为25帧
            self.show_image()
        else:
            QMessageBox.critical(self,'错误','摄像头未打开!')
            return None
    '''显示图片'''
    def show_image(self):
        flag,image = self.cap.read()  #从视频流中读取图片
        image_show = cv2.resize(image,(1280,800))  #把读到的帧的大小重新设置为 1280x800
        width,height = image_show.shape[:2] #行:宽,列:高
        image_show = cv2.cvtColor(image_show,cv2.COLOR_BGR2RGB)  #opencv读的通道是BGR,要转成RGB
        image_show = cv2.flip(image_show, 1)  #水平翻转,因为摄像头拍的是镜像的。
        #把读取到的视频数据变成QImage形式(图片数据、高、宽、RGB颜色空间,三个通道各有2**8=256种颜色)
        show = QtGui.QImage(image_show.data,height,width,QImage.Format_RGB888)
        self.label.setPixmap(QPixmap.fromImage(show))  # 往显示视频的Label里显示QImage
    '''关闭摄像头'''
    def close_camera(self):
        self.camera_timer.stop() #停止读取
        self.cap.release() #释放摄像头
        self.label.clear() #清除label组件上的图片

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    ui = Open_Camera()
    ui.show()
    sys.exit(app.exec_())

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Python3是一种编程语言,它提供了很多库和框架可以用于各种应用开发。PyQt5Python3的一个GUI(图形用户界面)库,它允许我们创建各种图形界面应用程序。PyCharm是一个Python集成开发环境(IDE),它提供了丰富的功能和工具,可以方便地进行Python编程和应用程序开发。 在Python3中,我们可以使用PyQt5库来访问和控制摄像头。通过使用PyQt5的QCamera和QCameraViewfinder类,我们可以访问计算机上已连接的摄像头设备,并在应用程序中显示摄像头视频流。这样我们就能够在应用程序中捕捉摄像头的图像,并进行进一步的处理和分析。 PyCharm是一个非常流行的Python开发工具,它提供了许多有用的功能来帮助我们编写、调试和测试Python代码。在PyCharm中,我们可以直接编写Python代码,并使用其强大的代码编辑器和自动补全功能来提高编码效率。同时,PyCharm还提供了集成的调试器,可以方便地调试和跟踪代码的执行过程。 因此,如果我们想在Python3中使用PyQt5库来访问和控制摄像头,并且希望使用一个强大的开发工具来编写和调试代码,我们可以选择使用PyCharm作为我们的开发环境。PyCharm提供了直观的界面和丰富的功能,可以让我们更轻松地编写和调试基于PyQt5摄像头应用程序。 ### 回答2: Python3是一种高级编程语言,PyQt5是用于创建图形界面应用程序的Python库,PyCharm是一种集成开发环境(IDE)。摄像头通常是指用于捕捉图像或视频的设备。 在Python中使用摄像头,可以使用OpenCV库来实现。OpenCV是一个开源计算机视觉库,可用于处理图像和视频。 要在PyQt5中使用摄像头,可以通过使用QCamera类来获取和控制摄像头。您可以将QCamera对象与QCameraViewfinder或QGraphicsView一起使用,以便在应用程序中显示摄像头捕捉的图像。 对于IDE,PyCharm是一种流行的Python开发环境,具有代码编辑器、调试器、版本控制等功能。PyCharm提供了丰富的功能和工具,使Python开发更加高效和便捷。 要在PyCharm中使用Python3和PyQt5以及摄像头,您可以首先安装Python3和PyQt5库。然后,您可以设置项目,并使用PyCharm提供的编辑器编写代码。在代码中,您可以导入所需的库和模块,以及使用适当的代码来处理摄像头和图像。 总而言之,您可以使用Python3编写具有PyQt5界面的应用程序,并在PyCharm中进行开发和调试。通过使用OpenCV库,您还可以使用摄像头捕捉图像和视频。 ### 回答3: Python3是一种高级编程语言,广泛应用于各个领域的软件开发和数据分析。PyQt5是一个Python模块,用于创建交互式和可视化的桌面应用程序。PyCharm是一种以Python为主要语言的集成开发环境(IDE),它提供了许多方便的工具和功能来帮助开发者更高效地编写和调试代码。 在Python3中,我们可以使用PyQt5来编写应用程序,包括调用摄像头进行图像采集和处理。通过调用PyQt5中的相机模块,我们可以访问计算机上的摄像头设备,并获取实时的图像数据。使用这些图像数据,我们可以进行各种图像处理操作,如图像增强、图像过滤、目标跟踪等。 为了更好地开发和调试Python应用程序,我们可以使用PyCharm作为开发工具。PyCharm提供了代码编辑器、调试器、版本控制集成等功能,可以提高开发效率和代码质量。在PyCharm中,我们可以轻松设置Python解释器,并导入所需的库和模块,以便使用PyQt5进行摄像头编程。 总结来说,Python3、PyQt5和PyCharm可以一起使用来实现摄像头相关的应用程序。Python3提供了强大的编程能力,PyQt5提供了访问和处理摄像头图像的功能,而PyCharm提供了开发工具和环境,使开发者可以更轻松地进行开发和调试工作。通过这些工具和技术,我们可以实现各种摄像头应用,如视频监控系统、人脸识别系统等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值