Rust OpenCV读取与保存图像

基本操作

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, &params)?;

    Ok(())
}
c

接下来简单解释一下代码。

首先,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, &params);

如果需要指定参数的话,需要将 params 定义为可变的,然后使用 push 方法添加对应参数即可。

转发至

微信扫一扫分享

WeChat QR Code

有AI相关的想法,但不知道怎么落地?

我是国冰,独立AI开发者。十多年技术一线——半导体显示、智慧城市到自动驾驶;现在一个人+AI,接AI落地项目,从梳理需求到系统落地,陪你走通。

微信聊聊 微信二维码 看我能做什么