我需要拍摄图像并获取 RGB 字节值列表。我正在使用图像箱。这就是我所拥有的:
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]);
}
Run Code Online (Sandbox Code Playgroud)
这看起来很丑陋。我必须引入一个中间变量,然后我得到一个指向我真正需要的值的指针向量,所以在我做其他事情之前,我必须再次映射它以获得实际值。
我想要的只是一个向量u8。我怎么得到它?
好吧,如果你只想要原始数据本身,你可以调用DynamicImage::raw_pixels:
let im = image::open("wall.jpg").unwrap().to_rgb();
let rgb: Vec<u8> = im.raw_pixels();
Run Code Online (Sandbox Code Playgroud)
如果您真正感兴趣的是第一个像素,我建议您致电GenericImage::get_pixel:
let im = image::open("wall.jpg").unwrap();
let first_pixel = im.get_pixel(0, 0);
Run Code Online (Sandbox Code Playgroud)
然后您可以将其转换[u8; 3]为 RGB 数据数组:
let rgb = first_pixel.to_rbg();
println!("First Pixel: {} {} {}", rgb.data[0], rgb.data[1], rgb.data[2]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1624 次 |
| 最近记录: |