1. Publisher
import numpy as np
import cv2
import rospy
from sensor_msgs.msg import Image
from std_msgs.msg import Header
def ros_img_pub(video_path, ros_img, header):
rospy.init_node('img_pub', anonymous=True)
pub_ = rospy.Publisher("/front_camera/image_raw", Image, queue_size=2)
rate = rospy.Rate(30)
print("/front_camera/image_raw ros image topic publish...")
while not rospy.is_shutdown():
cap = cv2.VideoCapture(video_path)
ret, image = cap.read()
while ret and not rospy.is_shutdown():
ret, image = cap.read()
if image is None:
break
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
header = Header(stamp=rospy.Time.now())
header.frame_id = 'result'
ros_img.encoding = 'rgb8'
ros_img.header = header
ros_img.height = image.shape[0]
ros_img.width = image.shape[1]
ros_img.step = image.shape[1] * image.shape[2]
ros_img.data = np.array(image).tostring()
pub_.publish(ros_img)
rate.sleep()
def main():
video_path = './front_12.avi'
ros_img = Image()
header = Header
ros_img_pub(video_path, ros_img, header)
if __name__ == '__main__':
main()
2. Subscriber
import numpy as np
import cv2
import rospy
from sensor_msgs.msg import Image
def img_callback(ros_img_msg, args):
assert isinstance(ros_img_msg, Image)
cv_img = np.frombuffer(ros_img_msg.data, dtype=np.uint8).reshape(ros_img_msg.height, ros_img_msg.width, -1)
cv_img = cv2.cvtColor(cv_img, cv2.COLOR_RGB2BGR)
cv2.imshow("cv_img", cv_img)
cv2.waitKey(1)
def main():
rospy.init_node('img_sub', anonymous=True)
sub_ = rospy.Subscriber('/front_camera/image_raw', Image, img_callback, ('args'))
rospy.spin()
if __name__ == '__main__':
main()