image_transport should always be used to subscribe to and publish images. It provides transparent support for transporting images in low-bandwidth compressed formats. Examples (provided by separate plugin packages) include JPEG/PNG compression and Theora streaming video.
When transporting images, you should use image_transport's classes as drop-in replacements for ros::Publisher and ros::Subscriber.
Camera drivers publish a "camera_info" sibling topic containing important metadata on how to interpret an image for vision applications. image_transport included helper classes to publish (image, info) message pairs and re-synchronize them on the client side:
For other synchronization or filtering needs, see the low-level filter class:
If you are an advanced user implementing your own image transport option, you will need to implement these base-level interfaces:
In the common case that all communication between PublisherPlugin and SubscriberPlugin happens over a single ROS topic using a transport-specific message type, writing the plugins is vastly simplified by using these base classes instead:
Because they encapsulate complicated communication behavior, image_transport publisher and subscriber classes have a public ROS API as well as a code API. See the wiki documentation for details.
Although image_transport::Publisher may publish many topics, in all code interfaces you should use only the name of the "base topic." The image transport classes will figure out the name of the dedicated ROS topic to use for the desired transport.