在哪里可以从网络摄像头源中添加捕获图像功能

时间:2018-11-28 13:17:30

标签: python image pyqt capture

我创建了一个GUI,该GUI使用QLabel输出网络摄像头。现在,我想执行一个功能来保存网络摄像头中的帧。我已经添加了一个功能到执行捕获的按钮上。然后,我将其放置在 update_frame 函数中,但是当我按下按钮时,它会反复遍历它,从而一次又一次地打印出我的确认消息。我可以在哪里放置 capture_image 函数?有人可以帮我吗?这将是很大的帮助。

def start_cam(self):
    self.capture=cv2.VideoCapture(0)
    self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT,180)
    self.capture.set(cv2.CAP_PROP_FRAME_WIDTH,316)

    self.timer = QTimer()
    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)   
    # Display Image Function
    self.displayImage(self.image,1)
    # Capture Image Function
    self.save_idButton.clicked.connect(self.capture_image)

def displayImage(self,img,window=1):
    qformat=QImage.Format_Indexed8
    if len(img.shape)==3: #[0]=rows, [1]=cols [2]=channels
        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)
    #BRG to RGB
    outImage=outImage.rgbSwapped()
    if window==1:
        self.frame_2.setPixmap(QPixmap.fromImage(outImage))
        self.frame_2.setScaledContents(True)

def capture_image(self):
    id_number = self.lineEdit.text()
    cv2.imwrite("Employee IDs/"+id_number+".png",self.image)
    ctypes.windll.user32.MessageBoxW(0, "    ID Saved Successfuly", "Success", 1)

0 个答案:

没有答案