В настоящее время я пытаюсь написать установку издателя/подписчика ROS, которая передает двоичный файл изображения, открытый PIL. Я бы не хотел использовать OpenCV из-за операционных ограничений, и мне было интересно, есть ли способ сделать это. Это мой текущий код:
#!/usr/bin/env python
import rospy
from PIL import Image
from sensor_msgs.msg import Image as sensorImage
from rospy.numpy_msg import numpy_msg
import numpy
def talker():
pub = rospy.Publisher('image_stream', numpy_msg(sensorImage), queue_size=10)
rospy.init_node('image_publisher', anonymous=False)
rate = rospy.Rate(0.5)
while not rospy.is_shutdown():
im = numpy.array(Image.open('test.jpg'))
pub.publish(im)
rate.sleep()
if __name__ == '__main__'
try:
talker()
except ROSInterruptException:
pass
который при попытке pub.publish(im) выдает:
TypeError: Invalid number of arguments, args should be ['header', 'height', 'width', 'encoding', 'is_bigendian', 'step', 'data'] args are (array([[[***array data here***]]], dtype=uint8),)
Как мне преобразовать изображение в правильную форму, или есть метод преобразования/другой тип сообщения, который поддерживает только отправку необработанных двоичных файлов через соединение ROS?
Спасибо