#计算机视觉 #图像转换 #OpenCV #数据 #nalgebra #ndarray #among

cv-convert

著名Rust计算机视觉库之间的类型转换

34个版本 (重大更新)

0.25.0 2023年10月15日
0.23.0 2023年7月26日
0.22.0 2023年2月7日
0.21.2 2022年10月20日
0.4.0 2021年3月26日

#166 in 机器学习

每月50次 下载
3 个crate中使用 (通过 davis-edi-rs)

MIT 协议

125KB
2.5K SLoC

cv-convert:在Rust中转换计算机视觉数据类型

著名Rust计算机视觉库之间的类型转换。它支持以下crate

使用方法

运行 cargo add cv-convert 将此crate添加到您的项目中。在默认设置下,使用最新依赖版本。

如果您希望启用指定的依赖版本,请添加 default-features = false 并选择crate版本作为Cargo功能。例如,功能 nalgebra_0-30 启用 nalgebra 0.30.x。

[dependencies.cv-convert]
version = 'x.y.z'  # Please look up the recent version on crates.io
default-features = false
features = [
    'image_0-24',
    'opencv_0-84',
    'tch_0-13',
    'nalgebra_0-32',
    'ndarray_0-15',
]

最低支持的 rustc 是 1.51。您可以使用 crate 的旧版本(>=0.6)来使用不支持 const-generics 的 rustc 版本。

Cargo 功能

opencv

  • opencv_0-84
  • opencv_0-83
  • opencv_0-82
  • opencv_0-81
  • opencv_0-80
  • opencv_0-79
  • opencv_0-78
  • opencv_0-77
  • opencv_0-76
  • opencv_0-75
  • opencv_0-74
  • opencv_0-73
  • opencv_0-72
  • opencv_0-71
  • opencv_0-70
  • opencv_0-69
  • opencv_0-68
  • opencv_0-67
  • opencv_0-66
  • opencv_0-65
  • opencv_0-64
  • opencv_0-63

image

  • image_0-24
  • image_0-23

imageproc

  • imageproc_0-23

ndarray

  • ndarray_0-15

nalgebra

  • nalgebra_0-32
  • nalgebra_0-31
  • nalgebra_0-30
  • nalgebra_0-29
  • nalgebra_0-28
  • nalgebra_0-27
  • nalgebra_0-26

tch

  • tch_0-13

使用方法

该库提供了 FromCvTryFromCvIntoCvTryIntoCv 特性,它们类似于标准库中的 FromInto

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)?;

// 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()?;

为该项目做出贡献

添加新的依赖版本

例如,为了添加cv-convert的nalgebra 0.32新版本,打开源代码库中的 cv-convert-generate/packages.toml。按如下方式添加新版本到列表中。

[package.nalgebra]
versions = ["0.26", "0.27", "0.28", "0.29", "0.30", "0.31", "0.32"]
use_default_features = true
features = []

在顶级目录下运行 make generate。它会自动修改Rust源文件。额外的一步是将 cv-convert/generated/Cargo.toml.snipplet 中的片段复制并粘贴到 cv-convert/Cargo.toml 中。

添加新的类型转换

例如,要添加新的类型转换,可以使用 image::DynamicImageopencv::Mat。接着进入 cv-convert/src,并在 with_opencv_image.rs 中实现代码,因为它涉及opencv和image crates之间的转换。

选择 FromCvTryFromCv 特性,并在 image::DynamicImageopencv::Mat 类型上添加特性实现。选择 FromCvTryFromCv 取决于转换是否可能失败。

impl FromCv<&image::DynamicImage> for opencv::Mat { /* omit */ }
impl FromCv<&opencv::Mat> for image::DynamicImage { /* omit */ }

// or

impl TryFromCv<&image::DynamicImage> for opencv::Mat { /* omit */ }
impl TryFromCv<&opencv::Mat> for image::DynamicImage { /* omit */ }

#[cfg(test)]
mod tests {
    // Write a test
}

许可证

MIT许可证。请参阅 LICENSE 文件。

依赖项

~35MB
~472K SLoC