Crate cv_convert

source ·
Expand description

Data conversion among computer vision libraries.

Version Selection

In the default setting, up-to-date dependencies are used. The default dependency versions are listed in [features] in cv-convert Cargo.toml.

You can manually select desired dependency versions. The choices of dependency versions are named accordingly as Cargo features. For example, the feature nalgebra_0-31 enables nalgebra 0.31.x. It allows to list crate version selections in Cargo.toml.

[dependencies.cv-convert]
version = 'x.y.z'
default-features = false
features = [
    'image_0-24',
    'opencv_0-76',
    'tch_0-10',
    'nalgebra_0-32',
    'ndarray_0-15',
]

It’s impossible to enable two or more versions for a dependency. For example, nalgebra_0-31 and nalgebra_0-32 are incompatible.

Traits

The traits FromCv and IntoCv provide .from_cv() and .into_cv(), and traits TryFromCv and TryIntoCv provide .try_from_cv() and .try_into_cv() methods respectively. Just like std’s From, Into, TryFromCv and TryIntoCv.

use cv_convert::{FromCv, IntoCv, TryFromCv, TryIntoCv};
use nalgebra as na;
use opencv as cv;

// FromCv
let cv_point = cv::core::Point2d::new(1.0, 3.0);
let na_points = na::Point2::<f64>::from_cv(&cv_point);

// IntoCv
let cv_point = cv::core::Point2d::new(1.0, 3.0);
let na_points: na::Point2<f64> = cv_point.into_cv();

// TryFromCv
let na_mat = na::DMatrix::from_vec(2, 3, vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0]);
let cv_mat = cv::core::Mat::try_from_cv(&na_mat).unwrap();

// TryIntoCv
let na_mat = na::DMatrix::from_vec(2, 3, vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0]);
let cv_mat: cv::core::Mat = na_mat.try_into_cv().unwrap();

Supported conversions

The notations are used for simplicity.

  • S -> T suggests the conversion is defined by non-fallible FromCv.
  • S ->? T suggests the conversion is defined by fallible TryFromCv.
  • (&)T means the type can be either owned or borrowed.
  • &'a S -> &'a T suggests that the target type borrows the source type.

opencv -> opencv

std -> tch

tch -> std

tch -> ndarray

ndarray -> tch

ndarray -> opencv

image -> tch

image -> opencv

opencv -> image 0.23

opencv -> image 0.24

opencv -> imageproc

imageproc -> opencv

opencv -> nalgebra

nalgebra -> opencv

opencv -> tch

tch -> opencv

opencv -> ndarray

Notes for OpenCV

For opencv older than 0.66, some systems requires clang-runtime feature to build successfully. Otherwise you will get libclang shared library is not loaded on this thread! panic. Add opencv dependency along side cv-convert in your project Cargo.toml to enable this feature.

cv-convert = { version = "0.22.0", default-features = false, features = ["opencv_0-65"] }
opencv = { version = "0.65", features = ["clang-runtime"] }

Most opencv modules, such as videoio and aruco, are disabled by default to avoid bloating. Add opencv dependency to your project Cargo.toml to enable default modules in your project.

Re-exports

Modules

Structs

Enums

Traits