opencv-rust安装与使用

Rust:开发 OpenCV 的示例 它提供了对OpenCV功能的访问。你可以使用这个库在Rust程序中调用OpenCV的功能。具体的安装和配置步骤可能会因你的操作系统和开发环境而有所不同,因此请参考。库的版本之间可能存在兼容性问题,因此请确保你选择了与你的OpenCV版本匹配的。请注意,为了成功运行上述代码,你需要先安装OpenCV库并将其与。你可以通过Cargo(Rust的包管理器)来安装它。要在Rust中使用OpenCV,你需要先安装。然后,你可以在你的Rust代码中使用。库的文档以获取更详细的指导。另外,OpenCV的版本和。 阅读详情
AI摘要

本文档记录了在Windows环境下安装和使用opencv-rust库的完整步骤,包括设置LLVM和OpenCV环境变量,以及如何解决接口查找困难的问题。通过示例解释了如何查找和调用Rust中的opencv接口,并探讨了内存管理和Mat对象的使用。此外,还介绍了cv::resize函数的使用方法。

最近在尝试用rust写视频处理代码,用到了opencv-rust这个库,这儿记录下安装过程。另外这个库说明文档比较欠缺,有些opencv接口不容易找到rust对应的调用名称或者方式,这儿将之前整理的接口查找的方法汇总了下。

1.windows下安装

1.1 llvm

这个是动态生成代码需要用到,安装好就行

https://releases.llvm.org/download.html

1.2 opencv

下载opencv安装即可,我安装的是opencv4.4版本。opencv-rust github主页用的choco安装,这个并不是必须的,可以手动安装llvm和opencv,设置环境变量就能正常的用opencv-rust

下面是官网给的环境变量设置方式,照着做就行了
在这里插入图片描述上面这个图片来源于这个issue,如果遇到更多的问题可以参考下
https://github.com/twistedfall/opencv-rust/issues/118

下面是我安装的opencv和配置(与上面步骤一样),可以参考下

安装完opencv需要设置环境变量即可,本机用的vs2019,这个是vc14(设置错了编译提示出错,最后有编译命令,可以看到是vc14.xxx)
在这里插入图片描述

1.3 toml配置

opencv = {version = “0.46”, default-features = false, features = [“opencv-4”, “buildtime-bindgen”]}

前面安装llvm是为了动态生成opencv绑定用的,如果不用动态绑定编译可能会出错(本来不想装llvm,去掉了buildtime-bindgen提示编译出错)

cargo build即可使用opencv-rust了

2. opencv-rust接口使用

2.1 toml配置

需要安装llvm和opencv,这个按照前面步骤来即可

opencv = {version = “0.46”, default-features = false, features = [“opencv-4”, “buildtime-bindgen”]}

2.2 代码的位置

cargo下载的代码都在下面这个目录:

C:\Users\xxx\.cargo\registry\src\github.com-yyyy\ 

xxx是电脑的用户名,github.com-yyyy每个人可能不一样,也可能会有几个文件夹,找到最新的一个文件夹。
这个目录下面找到:opencv-0.46.0这个目录,opencv-rust的代码都在这儿
部分binding代码需要在用到opencv-rust的工程里cargo build才能生成

2.3 opencv的c接口

这部分代码主要在opencv-0.46.0\bindings\cpp\opencv_4目录里

这部分是c代码,是opencv-rust这个库用llvm生成的。由于rust只能调用c接口,这儿的c代码将rust无法直接调用的代码封装成c接口。比如:cpp成员函数调用\函数重载\namespace等c没有的东西

  • c接口的Result定义

    定义在opencv-0.46.0\src_cpp\ocvrs_common.hpp 这个文件里,这个文件主要是c部分的Result和OCVRS_CATCH的定义,这两个基本上所有c接口函数都用到。而c里的Result会通过Rust里对应的Result的into_result转换成Rust内部的std::result::Result,具体继续往下看。

2.4 rust绑定接口

这是rust代码使用的opencv的接口

opencv-0.46.0\src\opencv目录下默认是opencv4,内容与opencv-0.46.0\bindings\rust\opencv_4是一样的,库编译的时候用的是src目录的内容

sys.rs是 2.3里的c接口的extern声明,这个基本上不需要看,函数名/接口与opencv的c接口一样的

常用代码在:core.rs,imgproc.rs。imgcodecs.rs和highgui.rs也有一部分

2.5 调用接口对应方法

opencv的cpp接口在rust里对应的接口以及调用参数查找方法

首先在opencv-0.46.0\bindings\cpp\opencv_4目录找到core.cpp\imgproc.cpp,看下c++下对应的接口被封装在了哪个c接口里

比如:cv::cvtColor,这个在imgproc.cpp里

	Result_void cv_cvtColor_const__InputArrayR_const__OutputArrayR_int_int(const cv::_InputArray* src, const cv::_OutputArray* dst, int code, int dstCn) {
		try {
			cv::cvtColor(*src, *dst, code, dstCn);
			return Ok();
		} OCVRS_CATCH(OCVRS_TYPE(Result_void))
	}

其中:对应的c的函数封装后的名对应的是:

cv_cvtColor_const__InputArrayR_const__OutputArrayR_int_int

用这个c的函数名称去opencv-0.46.0\src\opencv\hub目录下同名的文件去找,这儿对应的是:imgproc.rs

搜索c的函数名可以看到如下的rust封装代码,rust对外提供的接口名是cvt_color这个名字。可以看到opencv在Rust里的函数名称与c/c++的有区别,这就是需要按上面方法找对应关系的原因。

pub fn cvt_color(src: &dyn core::ToInputArray, dst: &mut dyn core::ToOutputArray, code: i32, dst_cn: i32) -> Result<()> {
	input_array_arg!(src);
	output_array_arg!(dst);
	unsafe { sys::cv_cvtColor_const__InputArrayR_const__OutputArrayR_int_int(src.as_raw__InputArray(), dst.as_raw__OutputArray(), code, dst_cn) }.into_result()
}

可以看到这儿unsafe里调用的是sys::xxxx这种形式,前面提到过外部c接口

2.6 部分重要的代码结构与类型

  • 目录结构

    此crate的入口在src/lib.rs,所有的mod都在src目录下,这个注意下就行了,opencv-0.46.0\bindings\rust\opencv_4这个目录并不在这个crate里,这个只是生成的一个中间目录

  • Result

    c结构部分定义了Result模板(见前面c接口部分),注意这个是c里的Result结构体,与Rust里的std::result::Result不是一样的。从上面代码段的调用可以看到,c接口返回的Result通过into_result转换成了Rust的Result。opencv-0.46.0\src\manual\sys.rs有这个c接口里Result的定义,两种类型的Result转换在Result定义的下方,具体见下面代码:

    pub fn into_result(self) -> CrateResult<O> {
    	if self.error_msg.is_null() {
    		Ok(self.result.into())
    	} else {
    		Err(Error::new(self.error_code, unsafe { crate::templ::receive_string(self.error_msg as *mut String) }))
    	}
    }
    

    Rust的Result在crate::Result,从lib.rs里可以看出这个Result在 error::Result

    打开src\error.rs看到Result的定义

    #[derive(Debug)]
    pub struct Error {
    	pub code: i32,
    	pub message: String,
    }
    
    impl Error {
    	pub fn new(code: i32, message: String) -> Self {
    		Self { code, message }
    	}
    }
    
    impl fmt::Display for Error {
    	fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    		write!(f, "{} (code: {})", self.message, self.code)
    	}
    }
    
    impl From<NulError> for Error {
    	fn from(_: NulError) -> Self {
    		Self::new(core::StsBadArg, "Passed Rust string contains nul byte".into())
    	}
    }
    
    impl std::error::Error for Error {}
    
    pub type Result<T, E = Error> = ::std::result::Result<T, E>;
    
  • crate::core

    在代码里经常看到crate::core这个模块,下面看下这个模块的位置

    在lib.rs的第五行可以看到如下代码引入了hub的所有模块

    pub use crate::opencv::hub::*;
    

    其中hub模块引入了core,imgcodecs等模块,后面代码里出现的crate::core等模块都是指hub里的这些模块

    pub mod calib3d;
    pub mod core;
    pub mod dnn;
    pub mod features2d;
    pub mod flann;
    pub mod highgui;
    pub mod imgcodecs;
    pub mod imgproc;
    pub mod ml;
    pub mod objdetect;
    pub mod photo;
    pub mod stitching;
    pub mod video;
    pub mod videoio;
    #[cfg(feature = "contrib")]
    pub mod world;
    pub mod types;
    

2.7 常用接口

opencv-0.46.0\examples\ 这个目录里有一些简单的例子,更多的例子可以参考 opencv-0.46.0\tests\这个目录,

2.7.1 Mat

Mat在下面这个文件里定义:
opencv-0.46.0\src\opencv\hub\core.rs
Mat的接口除了impl Mat还有MatTrait定义的方法,分别搜索impl Mat和pub trait MatTrait可以看下有没有要用的接口

  • 元素访问
    一维接口: at
    二维接口: at_2d

  • Mat内存释放
    Mat的内存管理与c++是否一致?
    比如ROI区域操作,opencv-rust里roi定义如下

    pub fn roi(m: &core::Mat, roi: core::Rect) -> Result<core::Mat> {
    	unsafe { sys::cv_Mat_Mat_const_MatR_const_RectR(m.as_raw_Mat(), &roi) }.into_result().map(|r| unsafe { core::Mat::opencv_from_extern(r) } )
    }
    

    这儿用的是:cv_Mat_Mat_const_MatR_const_RectR,这个在c++里定义如下,可以看到这儿用的是new cv::Mat,也就是roi函数new了一个Mat对象

    Result<cv::Mat*> cv_Mat_Mat_const_MatR_const_RectR(const cv::Mat* m, const cv::Rect* roi) {
    	try {
    		cv::Mat* ret = new cv::Mat(*m, *roi);
    		return Ok<cv::Mat*>(ret);
    	} OCVRS_CATCH(OCVRS_TYPE(Result<cv::Mat*>))
    }
    

    Mat生命周期结束后会自动调用drop,drop代码在 opencv-0.46.0\src\opencv\hub\core.rs 里
    可以看到drop里调用了 cv_Mat_delete函数

    impl Drop for Mat {
    	fn drop(&mut self) {
    		extern "C" { fn cv_Mat_delete(instance: *mut c_void); }
    		unsafe { cv_Mat_delete(self.as_raw_mut_Mat()) };
    	}
    }
    

    cv_Mat_delete函数在opencv-0.46.0\bindings\cpp\opencv_4\core.cpp里定义,这儿只是简单的调用了delete释放了Mat对象,delete 会引发自动执行Mat的析构函数

    void cv_Mat_delete(cv::Mat* instance) {
    	delete instance;
    }
    

    c++的Mat对象的析构函数可以看下官方文档:https://docs.opencv.org/4.4.0/d3/d63/classcv_1_1Mat.html

    这个网页里搜索:~Mat 可以看到文档里只有一句:calls release

    继续看下release函数,这个函数会减少引用计数,到0了就真正的释放内存

    opencv-rust实际上用的是opencv c++的内存管理方法,Rust只是多了一个Mat::drop触发析构函数的步骤而已,使用过程中按照c++的方式去操作即可,不用担心内存泄露

2.7.2 cv::resize

这个不要与Mat::resize弄混了
搜索的方法:在opencv-rust库里搜索所有文件:cv::resize
在imgproc.cpp里有调用

Result_void cv_resize_const__InputArrayR_const__OutputArrayR_Size_double_double_int(const cv::_InputArray* src, const cv::_OutputArray* dst, cv::Size* dsize, double fx, double fy, int interpolation) {
	try {
		cv::resize(*src, *dst, *dsize, fx, fy, interpolation);
		return Ok();
	} OCVRS_CATCH(OCVRS_TYPE(Result_void))
}

可以看到封装后的c接口为:

cv_resize_const__InputArrayR_const__OutputArrayR_Size_double_double_int

在opencv-rust库里搜索这个c接口名,可以在imgproc.rs里找到如下代码

pub fn resize(src: &dyn core::ToInputArray, dst: &mut dyn core::ToOutputArray, dsize: core::Size, fx: f64, fy: f64, interpolation: i32) -> Result<()> {
	input_array_arg!(src);
	output_array_arg!(dst);
	unsafe { sys::cv_resize_const__InputArrayR_const__OutputArrayR_Size_double_double_int(src.as_raw__InputArray(), dst.as_raw__OutputArray(), dsize.opencv_as_extern(), fx, fy, interpolation) }.into_result()
}

所以找到这个cv::resize在Rust里接口为:imgproc::resize(…)

使用 Rust 实现物体检测(YOLO) 物体检测是一项重要的计算机视觉任务,YOLO(You Only Look Once)是一种高效的物体检测模型,广泛应用于许多实际场景中。在本文中,我们将介绍如何使用 Rust 与 OpenCV 库结合,来进行物体检测,尤其是使用 YOLO 模型。使用 OpenCV 的 read_net_from_darknet 函数加载 YOLO 配置文件和权重文件,初始化 YOLO 模型。使用 OpenCV 的绘制函数在图像上标出检测到的物体,并显示检测结果。首先,确保你的系统已经安装了 Rust 和 OpenCV。 阅读详情

相关推荐

opencv-rust:OpenCV 3和4的Rust绑定

Rust OpenCV绑定 针对OpenCV 3和4的实验Rust绑定。 该API可用,但不稳定且未经实际测试。 使用风险自负。 快速开始 确保在系统中安装了受支持的OpenCV版本(3.2、3.4或4.x)和Clang(LLVM的一部分,需要自动绑定生成)。 更新您的Cargo.toml opencv = " 0.53 " 导入前奏 use opencv :: prelude :: * ; 获取OpenCV Linux 您可以通过多种方式获取OpenCV库: 从存储库安装它,请确保安装-dev软件包,因为它们包含用于构建板条箱的头文件(还请检查您的软件包是否包含pkg_config或cmake文件)。 在使用opencv crate构建项目之前,请手动构建OpenCV并设置以下环境变量: PKG_CONFIG_PATH的位置*.pc文件或OpenCV_DIR的位置*.c

Rust 和 OpenCV

我们都知道为什么 Rust 如此出色。然而,与 C/C++ 等老巨头相比,它有点过于新颖和闪亮,我们经常需要在没有适当文档的情况下使用 C++ 绑定。背景现在,让我们首先回答这个问题,我们为什么要关心在 Rust 中运行 OpenCV?为什么不直接使用 C++、Java 或 Python?C++ 是相当古老的冠军,与 Rust 或 Go 相比,编译 C++ 代码并不有趣。...

深度学习与计算机视觉 4509

rust-facedetect:在Rust上使用OpenCV入门

锈面检测 rust-facedetect是使用的入门。 运行时,它将抓住第一个可用的摄像机并显示来自其中的流,同时用矩形突出显示它可以检测到的任何面Kong。 跑步 cargo run 使用Esc退出。 执照 麻省理工学院

探索OpenCV Rust: 强大的计算机视觉库的Rust实现

探索OpenCV Rust: 强大的计算机视觉库的Rust实现 项目地址:https://gitcode.com/gh_mirrors/op/opencv-rust 在计算机视觉领域,项目,我们可以享受到OpenCV的强大功能,同时利用Rust语言的安全性和并发性。 项目简介 opencv-rust是OpenCV的Rust绑定库,它允许开发者使用Rust语言进行计算机视觉编程。该项目的目标是提供一...

gitblog_00064的博客 1975

OpenCV形状检测

开始定义我们的ShapeDetector类。我们将跳过这里的init构造函数,因为不需要初始化任何东西。#导入必要的包importcv2classShapeDetector#初始化形状名称并近似轮廓shape="unidentified"peri=cv2.arcLength(c,True)approx=cv2.approxPolyDP(c,0.04*peri,True)我们的检测方法,它只需要一个参数c,即我们试图识别的形状的轮廓。...

weixin_43229348的博客 9423

ASReview:基于主动学习的AI文献筛选工具,提升科研效率

主动学习是机器学习的一个重要分支,其核心原理是让算法能够主动选择最有价值的数据进行标注,从而以更低的成本获得更好的模型性能。这一技术通过人机协作的闭环流程,显著提升了数据标注和模型训练的效率和精度。在工程实践中,主动学习尤其适用于数据标注成本高昂或数据类别不平衡的场景,例如医学影像分析、自然语言处理中的文本分类以及推荐系统的冷启动问题。通过优先标注模型最不确定的样本,它能够有效解决传统机器学习面临的冷启动和数据稀疏性挑战。本文聚焦的ASReview项目,正是将主动学习原理应用于系统文献综述这一具体场景,通过

weixin_28725959的博客 431

如何使用OpenCV Rust绑定:从安装到实战的完整指南

OpenCV Rust绑定(opencv-rust)是一个为Rust开发者提供OpenCV 3和4版本接口的开源项目,让你能够在Rust生态中轻松实现计算机视觉功能。无论是图像处理、特征检测还是视频分析,这个项目都能帮助你快速构建高性能的视觉应用。 ## 🚀 为什么选择OpenCV Rust绑定? OpenCV作为计算机视觉领域的事实标准库,拥有丰富的算法和工具。而Rust语言的安全性和高性

gitblog_07346的博客 407

STM32H7+LAN8720A之ETH与LWIP配置问题(End)

开篇介绍 由于项目中需要使用到STM32H7系列的芯片,且该系列无法移植ST的标准库,只能使用ST的HAL库,通过STM32Cube生成HAL库的基本代码。在项目开发中需要使用到STM32板载的ETH口,在简化的四层模型中充当着数据链路层的角色,我们只需添加PHY并配置好IP,即可实现基本的TCP主从机通信、UDP通信等等。 一、激光雷达3i-T1 由于使用了一款只具有网口通信的单线激光雷达,其具有TCP和UDP方式的通信方式,为了避免进行TCP中的socket报文解析和繁琐的通信握手过程,我们首先将雷达配

weixin_42024702的博客 1万+

OpenCV Rust 绑定安装和配置指南

### 项目介绍 OpenCV Rust 是一个为 OpenCV 计算机视觉库提供 Rust 语言绑定的开源项目。OpenCV 是一个广泛使用的计算机视觉库,支持多种编程语言。OpenCV Rust 项目旨在让 Rust 开发者能够使用 OpenCV 的功能,同时保持 Rust 语言的特性。 ### 主要编程语言 该项目主要使用 Rust 语言进行开发。Rust 是一种系统编程语言,以其内存安全...

gitblog_07349的博客 638

忆阻器(二)——忆阻模拟器

除了真实的器件,我们也可以用运放和乘法器来搭忆阻模拟器。这节将介绍数学模型、matlab仿真及multisim仿真。 一、数学模型 忆阻分为磁控和荷控两种,这里介绍三次非线性磁控忆阻模型: {I=W(φ)VW(φ)=a+3bφ2dφdt=V \begin{cases} I=W(\varphi)V \\ W(\varphi)=a+3b \varphi ^2\\ \frac{d \varphi }{dt}=V \end{cases} ⎩⎪⎨⎪⎧​I=W(φ)VW(φ)=a+3bφ2dtdφ​=V​ 这里的WWW

http://www.icfgblog.com/ 1万+

微信小程序利用Echarts加载中国地图的步骤

微信小程序如何利用Echarts加载地图?可按照如下四个步骤进行。(阅读时间大概3分钟)。

成都都成 5273

惊!Rust绑定C++API运行OpenCV,效率大幅提升

不过需要注意的是,Array将会指向存储在Mat中的数据,所以当Mat被释放时,Array也必须被释放,否则我们(很可能)会指向已经释放的内存,这可不好!我之所以展示C++代码是有原因的,我们可以看到,大多数Rust代码在一定程度上可以从C++代码推导出来(借助如今强大的集成开发环境,我们还是有机会做到的。在Rust中,ndarray似乎是最适配的矩阵库(对于那些想要为Python的NumPy包编写绑定的人来说,ndarray是个不错的选择)。不过在Rust中,不需要进行繁琐的链接以及编写CMake文件。

具身机器人和通用AI 1264

让 AI 学会“慢思考”:MCP Sequential Thinking 深度部署与使用指南

摘要: MCP Sequential Thinking 是一种让AI具备"慢思考"能力的技术,通过动态调整思维路径解决复杂问题。本文详细介绍了在Windows、macOS和Linux系统下的部署方法,包括环境准备、配置文件修改等步骤。该技术通过"产生想法-评估需求-修正路径"的循环机制,显著提升AI在代码设计、数学证明等复杂任务中的表现。文章还提供了验证安装方法、使用示例和常见问题解答,帮助开发者解锁AI的深层思考能力。(149字)

weixin_43236925的博客 1907

【每周一库】 rust-cv - Rust下的OpenCV binding

本期的每周一库给大家带来的是rust-cv,基于rust的计算机视觉库,首先放上库的仓库地址:rust-cv Github仓库插曲:opencv-rust在正文开始之前写一些小插曲,本期...

Rust语言学习交流 4213

31、摩擦学中的材料选择

本博文深入探讨了摩擦学应用中材料选择的重要性,分析了材料的机械、物理和化学属性对摩擦学性能的影响。同时介绍了材料匹配原则、处理方法及表面涂层技术,以优化耐磨性和抗腐蚀性。通过实际案例和评估方法,为读者提供了系统化的材料选择流程和决策依据。

juice的博客 245

数据结构之博弈树搜索(深度优先搜索)

数据结构之博弈树搜索(深度优先搜索)

LucianaiB的博客 1523

opencv-rust 系列: 1, 安装及运行自带示例和测试程序

opencv-rust 系列: 1, 安装及运行自带示例和测试程序。

wzw_mzm的博客 1353

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

opencv-rust项目OpenCV安装配置指南

opencv-rust是一个为Rust语言提供OpenCV绑定的库,它允许开发者在Rust项目中使用OpenCV的强大功能。本文将详细介绍在不同操作系统下如何正确安装和配置OpenCV,以便顺利使用opencv-rust库。 ## OpenCV安装概述 opencv-rust依赖于系统安装的OpenCV库,因此在开始使用前需要确保系统中已正确安装OpenCV。安装方法因操作系统而异,下面将分别

gitblog_00264的博客 821

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

windows10下rust使用opencv4踩坑

windows10下rust使用opencv4库 opencv = "0.41.0" 首先这个库是对opencv的绑定,而opencv2.4版以后就不对C API进行维护了,虽然也是访问(但功能是都是以前的C API,新的方法功能都在C++文件中)。 rust的opencv库不是简单的绑定,FFI相关的内存处理,让你使用起来完全不用关心这些细节. 而且文档很好,可以很好的使用C++相关opencv的书籍例子. 对C++都放在cv这个命名空间进行了rust习惯的模块划分。 rust第三方库bin

u013195275的博客 2807

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

在树莓派上为opencv-rust包安装Open CV库

OpenCV-rust库在树莓派上的使用,以下是方法总结。

Zryake的博客 479

test opencv+rust

【代码】test opencv+rust。

coder2600的博客 296

cv-rs 项目常见问题解决方案

cv-rs 项目常见问题解决方案 项目基础介绍 cv-rs 是一个 Rust 语言的库,旨在为 OpenCV(Open Source Computer Vision Library)提供 Rust 绑定。OpenCV 是一个开源的计算机视觉库,包含数百种计算机视觉算法。cv-rs 项目通过手动创建 C 绑定,然后在 Rust 中构建 API,使得开发者可以使用 Rust 语言访问 OpenCV 的...

gitblog_00970的博客 978

OpenCV Rust终极指南:在Rust中实现强大的计算机视觉应用

想要在Rust中构建高性能的计算机视觉应用吗?OpenCV Rust为你提供了完美的解决方案!🚀 这个强大的库将OpenCV的丰富功能与Rust的安全性和性能完美结合,让你能够轻松处理图像识别、目标检测和实时视频分析等复杂任务。 ## 为什么选择OpenCV Rust? OpenCV Rust是OpenCV 3和4的Rust语言绑定,为开发者提供了: - **完全类型安全**的API设计

gitblog_00501的博客 576

【Rust交叉编译】在x86_64架构下交叉编译aarch64-linux-musl版的rust-opencv

在x86_64架构的Ubuntu系统上,纯静态编译aarch64平台的rust-opencv,以方便在嵌入式设备上移植。系统:Ubuntu 24.04,架构:x86_64,可使用WSL,或者Docker,本次使用Docker。

哈哈哈哈哈哈哈 1075

opencv-rust多平台部署指南:Linux、macOS和Windows全攻略

opencv-rust是OpenCV的Rust绑定库,它允许开发者在Rust项目中利用OpenCV强大的计算机视觉功能。本指南将详细介绍如何在Linux、macOS和Windows三大主流操作系统上部署opencv-rust,帮助你快速搭建开发环境,开启计算机视觉应用开发之旅。 ## 📋 准备工作 在开始部署opencv-rust之前,确保你的系统满足以下基本要求: - 安装Rust开发环

gitblog_00127的博客 495

rust(60)-opencv(1)

函数imread从指定的文件加载图像并返回它。如果无法读取图像(由于文件丢失、权限不正确、不支持或格式无效),函数将返回一个空矩阵(Mat::data==NULL)。 目前支持以下文件格式: Windows bitmaps - *.bmp, *.dib (always supported) JPEG files - *.jpeg, *.jpg, *.jpe (see the Note sectio...

The research on computer technolog 1151
上一篇: 设置linux驱动编译的中间目录
varding
博客等级 码龄17年 115粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值