cv-bridge-0.2.0 has been yanked.
cv-bridge-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.2.0"
or you can use cargo to add the dependency:
cargo add cv_bridge
Converting between ROS image messages and OpenCV images
use cv_bridge::CvImage;
use rosrust::sensor_msgs::Image;
use opencv::prelude::*;
fn main() {
# Convert from ROS image message to OpenCV image
let ros_image = Image::default();
let cv_image = CvImage::from_imgmsg(ros_image);
let mat = cv_image.as_cvmat("rgb8".to_string());
# Convert from OpenCV image to ROS image message
let cv_image = CvImage::from_cvmat(mat);
let ros_image = cv_image.into_imgmsg();
}
Using the underlying DynamicImage type
use cv_bridge::CvImage;
use rosrust::sensor_msgs::Image;
use image::DynamicImage;
fn main() {
# Convert from ROS image message to
let ros_image = Image::default();
let cv_image = CvImage::from_imgmsg(ros_image);
# Using the underlying DynamicImage type
let image = cv_image.as_image(); # Returns a immutable reference to the underlying DynamicImage
let image = cv_image.as_mut_image(); # Returns a mutable reference to the underlying DynamicImage
}
Creating CvImage from a vector of bytes
use cv_bridge::CvImage;
use std::vec;
fn main() {
let bytes:Vec<u8> = vec![0, 0, 0, 255, 255, 255, 0, 0, 0, 255, 255, 255, 0, 0, 0, 255, 255, 255, 0, 0, 0, 255, 255, 255, 0, 0, 0]; # 3x3 image with 3 channels
let cv_image = CvImage::from_vec(3, 3, "rgb8".to_string(), bytes); # width, height, encoding, bytes
}
Features