#python #opencv #ros
Вопрос:
У меня есть следующий код, из которого я изо всех сил пытался получить изображения. В разделе «Сжатые изображения» есть изображения в формате jpeg с камеры моего робота. Ниже приведена моя попытка. Терминал просто выдает мне версии из печати и выходит.
#!/usr/bin/env python
import cv2
import numpy as np
from timeit import default_timer as timer
from std_msgs.msg import Float64
from sensor_msgs.msg import Image, CompressedImage
from cv_bridge import CvBridge, CvBridgeError
import rospy
import sys
print(sys.version)
print(cv2.__version__)
height = 480
width = 640
global_frame = np.zeros((height,width,3), np.uint8)
def camera_callback(data):
bridge = CvBridge()
try:
global_frame = bridge.compressed_imgmsg_to_cv2(data)
except CvBridgeError as e:
print(e)
height, width, channels = global_frame.shape
# print(height)
cv2.imshow("Original", global_frame)
def lane_pose_publisher():
# Set the node name
rospy.init_node('lane_pose_publisher', anonymous=True)
rospy.Subscriber('/camera/image_raw/compressed', CompressedImage, camera_callback, queue_size = 1)
# set rate
rate = rospy.Rate(1000) # 1000hz
if __name__ == '__main__':
try:
lane_pose_publisher()
except rospy.ROSInterruptException:
pass
Ответ №1:
Это потому, что вы не вращаете ROS. Ознакомьтесь с соответствующим руководством по ROS, чтобы создать подписчика, где
# spin() simply keeps python from exiting until this node is stopped
rospy.spin()
вызывается, чтобы убедиться, что РОС может выполнять свою работу (вызывая обратные вызовы, …).
Поэтому вам следует заменить свои строки
# set rate
rate = rospy.Rate(1000) # 1000hz
с крутящимися.
Также вам следует добавить
cv2.waitKey(1)
после звонка
cv2.imshow("Original", global_frame)
чтобы обеспечить отображение изображения.
Комментарии:
1. Если спин не вызывается
rate.sleep()
в цикле, он будет эффективно работать так же2. Я заменил эту строку, как уже упоминалось, она по-прежнему не отображает живое видео. Но когда я закончу программу, она покажет мне последний кадр. Это самое значительное улучшение за последние несколько часов…
3. Попробуйте добавить
cv2.waitKey(1)
послеcv2.imshow("Original", global_frame)
4. Вот чего не хватало! Спасибо!