由于某些原因,我需要使用pyqt来捕获图像,而不是cv2。
我的目的是重复我的个人电脑相机,然后自动拍照。
下面的代码是通过手动更改QComboBox来工作的,但是失败的是for循环。
我尝试过很多方法,比如QThread.sleep,time.sleep,QCamera.stop,甚至是QThread发布的。
from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import *
import os, sys, time
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.cameras = QCameraInfo.availableCameras()
# this part doesn't work correctly, only last one worked
for i, cam in enumerate(self.cameras):
self.select_camera(i)
time.sleep(10)
toolbar = QToolBar("Camera Tool Bar")
self.addToolBar(toolbar)
camera_selector = QComboBox()
camera_selector.addItems([f'{i}.{cam.description()}' for i, cam in enumerate(self.cameras)])
camera_selector.currentIndexChanged.connect(self.select_camera)
toolbar.addWidget(camera_selector)
self.show()
def select_camera(self, i):
print(f"{i=:}")
self.camera = QCamera(self.cameras[i])
self.camera.setCaptureMode(QCamera.CaptureStillImage)
self.camera.start()
self.capture = QCameraImageCapture(self.camera)
timestamp = time.strftime("%d-%b-%Y-%H_%M_%S")
self.capture.capture(os.path.join(os.getcwd(), f"{i}.{timestamp}.jpg"))
if __name__ == "__main__":
App = QApplication(sys.argv)
window = MainWindow()
sys.exit(App.exec())发布于 2022-08-12 05:27:36
您需要始终记住,Qt和所有GUI系统一样,都是事件驱动的。__init__调用中没有显示任何内容。所做的就是发送一些信息。在进入主循环之前,什么都不会显示。因此,您需要使用一个QTimer组件来每10秒获得一个回调,在这个回调中,您选择您的新相机并拍摄。
https://stackoverflow.com/questions/73329566
复制相似问题