gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:06:02 25 4
gpt4 key购买 nike

我需要拍摄图像并获取 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com