Rust OpenCV读取与保存图像
基本操作
先来看一段Rust使用OpenCV读取与保存图像的最小完整代码。
use opencv::imgcodecs;
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
// 读取图像
let img = imgcodecs::imread("input.jpg", imgcodecs::IMREAD_ANYCOLOR)?;
// 保存图像所需要的参数对象,这里为默认值。
let params: opencv::core::Vector<i32> = opencv::core::Vector::new();
// 保存图像
imgcodecs::imwrite("output.jpg", &img, ¶ms)?;
Ok(())
}接下来简单解释一下代码。
首先,Rust调用OpenCV依赖 Rust OpenCV bindings 。图像编解码、读取与存储相关功能在模块 imgcodecs 中。所以第一步要引入该模块:
use opencv::imgcodecs;Rust调用OpenCV的 imread 函数读取图像文件的函数定义为:
pub fn imread(filename:&str, flags:i32) ->Result<core::Mat>这里需要注意的是第二个参数 flags ,在C++的API中,它有默认值枚举值 IMREAD_COLOR 。在Rust中,该数值需要显式的指定,例如:
let img = imgcodecs::imread("input.jpg", imgcodecs::IMREAD_ANYCOLOR);图像存储函数面临着相似的问题, imwrite 的定义为:
pub fn imwrite(filename: &str, img: &dyn core::ToInputArray, params: &core::Vector<i32>) -> Result<bool>
函数的第三个参数 params 同样需要显式地指定,例如采用默认参数:
let params: opencv::core::Vector<i32> = opencv::core::Vector::new();
imgcodecs::imwrite("output.jpg", &img, ¶ms);如果需要指定参数的话,需要将 params 定义为可变的,然后使用 push 方法添加对应参数即可。
有AI相关的想法,但不知道怎么落地?
我是国冰,独立AI开发者。十多年技术一线——半导体显示、智慧城市到自动驾驶;现在一个人+AI,接AI落地项目,从梳理需求到系统落地,陪你走通。
微信聊聊
看我能做什么
看我能做什么
评论 ()