psnr/src/main.rs

45 lines
1.2 KiB
Rust

extern crate image;
extern crate psnr;
use std::env::args;
use std::fs;
use image::ImageResult;
use psnr::psnr_files;
fn psnr_dir(path1: &str, path2: &str) -> Vec<(String, ImageResult<f64>)> {
let mut dirs1: Vec<_> = fs::read_dir(path1).unwrap()
.map(|x|x.unwrap())
.filter(|x| x.file_name().into_string().unwrap().ends_with(".png"))
.collect();
let mut dirs2: Vec<_> = fs::read_dir(path2).unwrap()
.map(|x|x.unwrap())
.filter(|x| x.file_name().into_string().unwrap().ends_with(".png"))
.collect();
dirs1.sort_by_key(|x| x.file_name());
dirs2.sort_by_key(|x| x.file_name());
let mut res = vec!();
for file in dirs1 {
let p1 = path1.to_owned() + &file.file_name().to_owned().into_string().unwrap();
let p2 = path2.to_owned() + &file.file_name().to_owned().into_string().unwrap();
let psnr = psnr_files(&p1, &p2);
let elt = (file.file_name().to_owned().into_string().unwrap(), psnr.unwrap());
println!("{} {}", elt.0, elt.1);
res.push((elt.0, Ok(elt.1)));
}
res
}
fn main() {
let path1 = args().nth(1).unwrap();
let path2 = args().nth(2).unwrap();
let _ = psnr_dir(&path1, &path2);
}