> ## Content Index
> Fetch the complete content index at: https://yinguobing.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# Rust OpenCV读取与保存图像
- URL: https://yinguobing.com/blog/rust-opencv-image-read-write/
- Published: 2022-07-10T13:47:29.000Z
- Updated: 2026-09-08T02:07:16.000Z
- Description: 基本操作
- Author: 尹国冰
- Tags: Rust, OpenCV

先来看一段Rust使用OpenCV读取与保存图像的最小完整代码。

```rust
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*](https://crates.io/crates/opencv?ref=yinguobing.com)。图像编解码、读取与存储相关功能在模块 `imgcodecs` 中。所以第一步要引入该模块：

```rust
use opencv::imgcodecs;
```

Rust调用OpenCV的 `imread` 函数读取图像文件的函数定义为：

```rust
pub fn imread(filename:&str, flags:i32) ->Result<core::Mat>
```

这里需要注意的是第二个参数 `flags` ，在C++的API中，它有默认值枚举值 `IMREAD_COLOR` 。在Rust中，该数值需要显式的指定，例如：

```rust
let img = imgcodecs::imread("input.jpg", imgcodecs::IMREAD_ANYCOLOR);
```

图像存储函数面临着相似的问题， `imwrite` 的定义为：

```rust
pub fn imwrite(filename: &str, img: &dyn core::ToInputArray, params: &core::Vector<i32>) -> Result<bool>

```

函数的第三个参数 `params` 同样需要显式地指定，例如采用默认参数：

```rust
let params: opencv::core::Vector<i32> = opencv::core::Vector::new();
imgcodecs::imwrite("output.jpg", &img, &params);
```

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