Table of contents

Rustでの画像保存の高速化

概要

実装

fn save_file(frame: &Video, index: usize) -> std::result::Result<(), std::io::Error> {
    let mut file = File::create(format!("frame{}.ppm", index))?;
    file.write_all(format!("P6\n{} {}\n255\n", frame.width(), frame.height()).as_bytes())?;
    file.write_all(frame.data(0))?;
    Ok(())
}
Camera /dev/video0: 1920 * 1080, 50 FPS
save ppm by directly
Process 21.945 msec
save png by image
Process 94.467 msec
Camera /dev/video0: 640 * 360, 330 FPS
save ppm by directly
Process 3.509 msec
save png by image
Process 8.609 msec
  • 結果としては大体2-4倍の高速化ができたので満足
    • 一方でdataの大きさは3倍くらいになっていたのでトレードオフになっている点には注意
    • というか画像保存って結構時間かかる処理なんだなと改めて認識