Я пытаюсь подписаться на видеопоток ROS.Я знаю, что могу правильно подписаться на правильный ростопик, поскольку могу сохранять изображения, полученные из видео.
Следующее, что я пытаюсь сделать, - это показать канал видео на графическом интерфейсе пользователя PyQt4.,Графический интерфейс имеет и другие функции, кроме отображения только изображений.
Я использую cvbridge для преобразования изображений ROS в изображения Opencv.Но я не могу отобразить полученные изображения в графическом интерфейсе.Я нашел способ показа видео, что не так красиво.Сначала я сохраняю файл изображения, а затем читаю его для отображения видео в графическом интерфейсе.Но оно дает прерывистое, а не плавное видео.
Это моя функция обратного вызова ROS для обновления моих изображений
def image_callback(msg):
print("Received an image!")
try:
# Convert your ROS Image message to OpenCV2
cv2_img = bridge.imgmsg_to_cv2(msg, "bgr8")
except CvBridgeError, e:
print(e)
else:
# Save your OpenCV2 image as a jpeg
cv2.imwrite('camera_image.jpeg', cv2_img)
#cv2.imshow('Video', cv2_img)
Ниже приведен мой код для обновления изображения в графическом интерфейсе (обратите внимание, чтоВ настоящее время я загружаю сохраненное изображение, чтобы отобразить его в графическом интерфейсе):
def update_frame(self):
img = cv2_img
#print(img.shape)
self.basecam_videofeed.setPixmap(QtGui.QPixmap(_fromUtf8('camera_image.jpeg')))
self.basecam_videofeed.setPixmap(QtGui.QPixmap(_fromUtf8('camera_image.jpeg')))
Я закомментировал строку print (img.shape), поскольку она выдает ошибку, что img не имеет формы атрибута.Я хотел бы знать, как я могу использовать свое изображение напрямую и отображать его в графическом интерфейсе, не сохраняя и не загружая его снова.Могу ли я напрямую использовать глобальную переменную cv2_img?Я дал ему много разных попыток, но я всегда сталкиваюсь с ошибками.Мне интересно, преобразовывает ли cvbridge изображения ros в правильный формат?