此代码在windows上运行,但在Linux上出现错误“QApplication不是在主线程中创建的”,如何解决它,

2024-09-27 23:25:58 发布

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

import cv2
import threading

class camThread(threading.Thread):
    def __init__(self, previewName, camID):

        threading.Thread.__init__(self)
        self.previewName = previewName
        self.camID = camID

    def run(self):

        print "Starting " + self.previewName
        camPreview(self.previewName, self.camID)

def camPreview(previewName, camID):
    cv2.namedWindow(previewName)
    cam = cv2.VideoCapture(camID)
    if cam.isOpened():  # try to get the first frame

        rval, frame = cam.read()

    else:

        rval = False
    while rval:

        cv2.imshow(previewName, frame)
        rval, frame = cam.read()
        key = cv2.waitKey(20)
        if key == 27:  

            break
    cv2.destroyWindow(previewName)

# Create two threads as follows

thread1 = camThread("Camera 1", 1)
thread2 = camThread("Camera 2", 2)

thread1.start()
thread2.start()

Tags: importselfifinitdefcv2threadframe
1条回答
网友
1楼 · 发布于 2024-09-27 23:25:58

不要创建线程,namedWindowimshowdestroyWindow不能在线程中调用

def preview(camera_ids):
    cameras = {}
    for name, id in camera_ids.items():
        cv2.namedWindow(name)
        cameras[name] = cv2.VideoCapture(id)
    while True:
        for name, cam in cameras.items():
            ok, frame = cam.read()
            if ok: cv2.imshow(name, frame)
        key = cv2.waitKey(20)
        if key == 27:  
            break
    for name in cameras:
        cv2.destroyWindow(name)

preview({"Camera 1": 1, "Camera 2": 2})

相关问题 更多 >

    热门问题