У меня есть несколько источников для 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()