Невозможно открыть новое соединение с веб-камерой в OpenCV из цикла while.Python

Программы на Python
Anonymous
Невозможно открыть новое соединение с веб-камерой в OpenCV из цикла while.

Сообщение Anonymous »

Я пытаюсь создать приложение, которое может переключаться между изображениями с веб-камеры. Я помещаю функциональность веб-камеры в класс, и он создает объект VideoCapture при создании класса.
Когда я инициализирую класс вне цикла While, у него нет проблем с открытием VideoCapture. . Когда я пытаюсь создать класс внутри цикла while (в приведенном ниже примере это только входные данные, входные данные — это индекс камеры), не удается правильно открыть VideoCapture.
import cv2
from threading import Thread

class CamObj:
"""
Class that continuously acquires images from a camera.
"""

def __init__(self, index):
self.error = False
print("Camera created")
self.index = index

self.stream = cv2.VideoCapture(self.index)
(self.got_frame, self.frame) = self.stream.read()

if not self.stream.isOpened():
print(self.index + " NOT OPENED")

self.running = True
self.thread = Thread(target=self.get_frames_loop)
print("Camera starting")
self.thread.start()

def get_frames_loop(self):
while self.running:
if not self.got_frame:
print("NO FRAME")
self.stop()
else:
(self.got_frame, self.frame) = self.stream.read()

def stop(self):
self.running = False
self.stream.release()

def run():
camera = CamObj(0) # good, works
camera = CamObj(1) # also works
while True:
index = input("\n Enter camera index: ")
camera.stop()
camera = CamObj(index) # fails to open the capture

# Press the green button in the gutter to run the script.
if __name__ == '__main__':
run()

Я проверил, что он работает последовательно вне цикла while. (см. CamObj0 и CamObj1)
Я попробовал все индексы веб-камер, которые работают на моем компьютере (в настоящее время тестирую 4)
Я попробовал просто изменить индекс, выполнив вместо этого следующую функцию:
def change_index(self, index):
self.stream.release()
self.stream = cv2.VideoCapture(self.index)
if not self.stream.isOpened():
print(self.index + " NOT OPENED")


Подробнее здесь: https://stackoverflow.com/questions/789 ... while-loop

Вернуться в «Python»