rust - 使用图像箱时如何获得 u8 RGB 值的向量?

标签 rust

我需要拍摄图像并获取 RGB 字节值列表。我正在使用 the image crate .这是我的:

extern crate image;

fn main() {
    let im = image::open("wall.jpg").unwrap().to_rgb();
    let data: Vec<[u8; 3]> = im.pixels().flat_map(|p| vec![p.data]).collect();
    let rgb: Vec<&u8> = data.iter().flat_map(|p| p.iter()).collect();
    println!("First Pixel: {} {} {}", rgb[0], rgb[1], rgb[2]);
}

这看起来很丑陋。我必须引入一个中间变量,并获得指向我真正需要的值的指针向量,因此在我可以做其他事情之前,我必须再次映射它以获取实际值。

我想要的只是一个 u8 的向量。我如何获得它?

最佳答案

自 0.23.12 起,to_rgb已弃用 DynamicImage::to_rgb8DynamicImage::to_bytes相反:

let im = image::open("wall.jpg").unwrap().to_rgb8();
let rgb: Vec<u8> = im.into_raw();

// Alternatively
let bytes = image::open("wall.jpg").unwrap().to_bytes();

在 0.23.12 之前,如果你只想要原始数据本身,你可以直接调用 DynamicImage::raw_pixels :

let im = image::open("wall.jpg").unwrap().to_rgb();
let rgb: Vec<u8> = im.raw_pixels();

如果您真正感兴趣的只是第一个像素,我建议您调用 GenericImage::get_pixel :

let im = image::open("wall.jpg").unwrap();
let first_pixel = im.get_pixel(0, 0);

然后你可以把它变成一个 [u8; 3] RGB 数据数组:

let rgb = first_pixel.to_rbg();
println!("First Pixel: {} {} {}", rgb.data[0], rgb.data[1], rgb.data[2]);

关于rust - 使用图像箱时如何获得 u8 RGB 值的向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50821070/

相关文章:

rust - 我可以使用 Rust 词法分析器或解析器来检索 Rust 文件中的函数列表吗?

rust - 如何在 Rust 中使用条件编译宏的示例

iterator - 为什么有两种迭代向量的方法,IntoIterator 和 Iter?

path - 如何列出文件夹并返回特定文件类型的所有文件名?

python - PyO3 将 rust 结构转换为 PyObject

rust - "tokio::mpsc::channel"上的接收器仅在缓冲区已满时接收消息

parallel-processing - 程序仍然使用 par_iter 和 par_extend 在一个线程上运行

multithreading - 我可以定义一个特征,其实现必须是 `!Send` 吗?

rust - 如何理解这个返回另一个函数的Rust函数?

rust - 从创建结构的宏的参数访问 self