Цель состоит в том, чтобы получить данные с виртуальной камеры (с камеры в моделировании Gazebo, обновляется каждую секунду) и использовать Detectron2 (требуется, чтобы данные поступали из cv2.VideoCapture) для распознавания других объектов в моделировании. . Виртуальная камера, конечно, не отображается в lspci
, поэтому я не могу просто использовать cv2.VideoCapture (0).
Итак, мой код
bridge = CvBridge()
cv_image = bridge.imgmsg_to_cv2(data, desired_encoding='bgr8') #cv_image is numpy.ndarray, size (100,100,3)
cap = cv2.VideoCapture()
ret, frame = cap.read(image=cv_image)
print(ret, frame)
, но он просто печатает False None
, предполагаю потому что в шапке ничего не захватывается. I
f Я заменяю строку 2 на cap = cv2.VideoCapture(cv_image)
Я получаю сообщение об ошибке
TypeError: only size-1 arrays can be converted to Python scalars
, поскольку я считаю, что для этого требуется либо целое число (представляющее номер веб-камеры), либо строка (представляющая видеофайл).
И для справки,
cv_image = bridge.imgmsg_to_cv2(data, desired_encoding='bgr8') # cv_image is numpy.ndarray
cv2.imshow('image', cv_image)
cv2.waitKey(1)
отлично отображает изображение. Может ли быть способ использовать imshow () или что-то подобное в качестве ввода для VideoCapture ()?
Однако cap = cv2.VideoCapture(cv2.imshow('image', cv_image))
открывает пустое окно и дает мне:
[ERROR:0] global /io/opencv/modules/videoio/src/cap.cpp (116) open VIDEOIO(CV_IMAGES): raised OpenCV exception:
OpenCV(4.2.0) /io/opencv/modules/videoio/src/cap_images.cpp:293: error: (-215:Assertion failed) !_filename.empty() in function 'open'
Как можно Я создаю объект cv2.VideoCapture()
, который может использовать имеющиеся у меня данные изображения? Или что-то может указать мне в правильном направлении?
Ubuntu 18.04 и Python 3.6 с opencv- python 4.2.0.34