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