rust - 使用图像箱时如何获得 u8 RGB 值的向量?
问题描述
我需要拍摄图像并获取 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]);
}
这看起来很丑陋。我必须引入一个中间变量,并得到一个指向我真正需要的值的指针向量,所以在我可以做其他事情之前,我必须再次映射它以获得实际值。
我想要的只是一个向量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]);
推荐阅读
- .net-core - HttpClient 面对并发请求到底是怎么做的?
- c - ++a 和 a+1 的区别
- python - FastAPI:全局变量与模块变量
- powerbi - Power Automate 动态 Sharepoint 链接或 Asana 附件
- excel - Excel - 在静态行的末尾添加随机生成的行(由 4 列组成)
- python - 尝试将内部带有 ndarrays 的元组转换为具有附加维度的另一个 ndarray
- reactjs - 如何跟踪是否使用 useState 钩子检查了组中的一个或多个 CheckBox?
- html - 如何仅在输入数字中限制两位小数
- javascript - 如何在 React 中创建附加到数据库的列表
- python - 应用程序断开连接的事件处理程序代码