#ros #opencv #image #convert #messages #channel #implemenation

cv-bridge

Rust implemenation of cv_bridge that converts between ROS image messages and OpenCV images

4 releases

0.3.3 Feb 11, 2023
0.3.2 Feb 11, 2023
0.2.0 Dec 21, 2022
0.1.1 Dec 20, 2022

#935 in Images

MIT license

31KB
424 lines

cv-bridge-rs

Crates.io Docs.rs

Rust implemenation of cv_bridge that converts between ROS image messages and OpenCV images

Warning: This package is still under active development. Use at your own risk.

Getting Started

Adding cv_bridge to your project

Add the following to your Cargo.toml file under dependencies:

[dependencies]
cv-bridge = "0.3.3"

or you can use cargo to add the dependency:

cargo add cv_bridge

Converting between ROS image messages and OpenCV images

use opencv::highgui;
use cv_bridge::{
    CvImage,
    msgs::sensor_msgs::Image,
};

fn main() {
    // Initialize ros node
    rosrust::init("image_viewer");

    // Create image subscriber
    let _subscriber_raii = rosrust::subscribe(
        "/camera/image_raw",
        5,
        move |image: Image| {
            // Convert ros Image to opencv Mat
            let mut cv_image = CvImage::from_imgmsg(image).expect("failed to construct CvImage from ros Image"); 
            let mat = cv_image.as_cvmat().expect("failed to convert CvImage to Mat");

            // Display image
            let window = "view";
            highgui::named_window(window, highgui::WINDOW_AUTOSIZE).unwrap();
            highgui::imshow(window, &mat).unwrap();
            highgui::wait_key(1).unwrap();
        }
    );

    rosrust::spin();
}

Features

  • Covert to and from sensor_msgs/Image and opencv::core::Mat
  • Support for various encodings defined by sensor_msgs: image_encodings.h crate
  • Support for 8-bit and 16-bit depth channels
  • Support for 32-bit and 64-bit depth channels
  • Documentation and examples
  • Covert to and from sensor_msgs/CompressedImage and opencv::core::Mat

Dependencies

~28–44MB
~841K SLoC