Python:如何在pyqt5中使用Opencv捕获帧

2024-04-20 06:49:10 发布

您现在位置:Python中文网/ 问答频道 /正文

这是加载pyqt gui表单的主代码,它有两个按钮

启动网络摄像头,第二个摄像头用于从相框中捕捉照片。在

我写了第一个按钮,但我写不出捕获按钮。在

import sys
import cv2
import numpy as np
from PyQt5.QtCore import QTimer
from PyQt5.QtGui import  QImage,QPixmap
from PyQt5.QtWidgets import QApplication , QDialog
from PyQt5.uic import loadUi

img_counter = 0

class video (QDialog):
    def __init__(self):
        super(video, self).__init__()
        loadUi('video.ui',self)
        self.image=None
        self.startButton.clicked.connect(self.start_webcam)
        self.capture.clicked.connect(self.keyPressEvent)

    def start_webcam(self):
        self.capture =cv2.VideoCapture(0)
        self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT,480)
        self.capture.set(cv2.CAP_PROP_FRAME_WIDTH,640)

        self.timer=QTimer(self)
        self.timer.timeout.connect(self.update_frame)
        self.timer.start(5)

    def update_frame(self):
        ret,self.image=self.capture.read()
        self.image=cv2.flip(self.image,1)
        self.displayImage(self.image,1)

    def keyPressEvent(self):
        flag, frame= self.capture.read()
        path = 'J:\Face'
        cv2.imwrite(os.path.join(path,'wakka.jpg'), frame)

    def displayImage(self,img,window=1):
        qformat=QImage.Format_Indexed8
        if len(img.shape)==3 :
            if img.shape[2]==4:
                qformat=QImage.Format_RGBA8888
            else:
                qformat=QImage.Format_RGB888

        outImage=QImage(img,img.shape[1],img.shape[0],img.strides[0],qformat)

        outImage=outImage.rgbSwapped()


        if window==1:
            self.imgLabel.setPixmap(QPixmap.fromImage(outImage))
            self.imgLabel.setScaledContents(True)

if __name__=='__main__':
    app=QApplication(sys.argv)
    window=video()
    window.setWindowTitle('main code')
    window.show()
    sys.exit(app.exec_())

我想从相框中捕捉照片并保存在文件夹中。在

在self.capture.已单击.连接(self.keypress事件)当我们点击按钮的时候。在

我应该在keyPressEvent def中编写函数

在捕获点击一个按钮

有人能帮我渡过难关吗?在

编辑注释

^{pr2}$

我想要循环的条件,这样我就可以用counter保存img\u name格式,但是计数器必须是点击次数


Tags: fromimageimportselfimgdefvideowindow
1条回答
网友
1楼 · 发布于 2024-04-20 06:49:10

keyPressEvent是一种方法,它允许您在小部件有焦点的情况下捕获键,在您的情况下这是不必要的,解决方案是简单地更改其名称,另一方面我改进了您的代码。在

^{1}$

相关问题 更多 >