我真的是 Rust 的新手,也是 OpenCV 的新手(是的)。
我有一个在单独的 POC 中工作的简单 OpenCV 示例。但随后将其集成到工作流管道中,我需要返回类型为 Vec<u8>
的缓冲区。
Img 是一个 Mat 对象,它具有这个 to_vec_2d
方法。但我不确定如何将其转换为 u8?
我想我可能需要遍历 Mat 类型。 u8可以映射吗?
fn edge_detect(width: u32, height: u32, bytes: Vec<u8>, _metadata: Metadata) -> (u32, u32, Vec<u8>) {
let img = imdecode(&Vector::from_iter(bytes), imgcodecs::IMREAD_ANYCOLOR).expect("Failed to decode");
let mut result = img.clone();
canny(&img, &mut result, 100.0, 200.0, 3, false).expect("Failed to find edges");
let vec_result : Vec<u8> = result.to_vec_2d().expect("Cannot convert to vector");
(width, height, vec_result)
}
答案 0 :(得分:1)
您可以在迭代器上使用 flat_map
来获取它们:
fn main() {
let vec_2d = vec![vec![0, 1], vec![2, 3]];
let v: Vec<u8> = vec_2d.iter().flat_map(|v| v.iter()).cloned().collect();
println!("{:?}", v);
}