我创建了一个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)