Как мне разрешить OpenCV Ошибка захвата изображений в потоке? - PullRequest
0 голосов
/ 08 мая 2019

У меня есть несколько источников для OpenCV Videocapture, и я хочу загрузить каждый из них в отдельном потоке. Теперь загрузка изображений и фильмов хорошая, но веб-камеры дают мне пустые изображения. Это происходит только тогда, когда я делаю это в темах. В ситуации, когда я использую тот же код без потока, я получаю изображения с веб-камеры. OpenCV выдает мне следующую ошибку:

[ERROR:0] VIDEOIO(makePtr<VideoCapture_DShow>(index)): raised unknown C++ exception!

Может кто-нибудь помочь мне решить эту проблему?

class render(threading.Thread):

    def __init__ (self, _scene):
        threading.Thread.__init__(self)
        self.scene = _scene

    def renderWebcam(self,src):
        camera = cv2.VideoCapture(src+cv2.CAP_DSHOW)
        camera.set(cv2.CAP_PROP_FRAME_WIDTH,1280)
        camera.set(cv2.CAP_PROP_FRAME_HEIGHT,720)

        while True:
            try:
                rc,image = camera.read()
                img = cv2.resize(image,(640,360))
                cv2.imwrite('renderfiles/Totaal.png', img)
                crop = image[100:460, 100:740]
                img = cv2.resize(crop,(640,360))
                cv2.imwrite('renderfiles/Ingezoomd.png', img)
            except KeyboardInterrupt:
                break;
        camera.release();
        cv2.destroyAllWindows()

Я использую Python 2.7 на Windows 10 и веб-камеры Logitech

Обновление: Минимальная настройка, при которой возникает эта ошибка:

from threading import Thread
import cv2

def renderWebcam(src,name):
    camera = cv2.VideoCapture(src+cv2.CAP_DSHOW)

    while True:
        try:
            rc,image = camera.read()
            img = cv2.resize(image,(640,360))
            cv2.imwrite('renderfiles/'+name+'.png', img)
        except KeyboardInterrupt:
            break;
    camera.release();
    cv2.destroyAllWindows()

thread = Thread(target=renderWebcam, args=(0,'Webcam1')) 
thread.start()
thread = Thread(target=renderWebcam, args=(1,'Webcam2')) 
thread.start()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...