imageproc
imageproc copied to clipboard
median_filter is two orders of magnitude slower than opencv::imgproc::median_blur.
#[cfg(test)]
mod tests{
use std::{path::PathBuf, time::SystemTime};
use cv::{imgcodecs::IMREAD_GRAYSCALE, core::CV_8UC1};
use image::{DynamicImage, GrayImage, buffer::ConvertBuffer};
use opencv as cv;
use opencv::prelude::*;
use tiff::decoder::{Decoder, ifd};
use imageproc::filter;
#[test]
fn test_image(){
let path = "a.tiff".to_string();
let pathbuf = PathBuf::from(path);
let img = image::open(pathbuf).unwrap();
let img = img.as_luma16().unwrap();
let img: GrayImage = img.convert();
let t0 = SystemTime::now();
let img_median = filter::median_filter(&img, 7, 7);
let t1 = SystemTime::now();
println!("{:?}", img_median.dimensions());
println!(
"time: {}s",
t1.duration_since(t0).unwrap().as_millis() as f64 / 1000.
);
}
#[test]
fn test_opencv(){
let path = "a.tiff";
let img = cv::imgcodecs::imread(path, cv::imgcodecs::IMREAD_GRAYSCALE).unwrap();
let mut img_8 = Mat::default();
img.convert_to(&mut img_8, CV_8UC1, 1.0/255.0, 0.0).unwrap();
let t0 = SystemTime::now();
let mut img_median = Mat::default();
cv::imgproc::median_blur(&img, &mut img_median, 7).unwrap();
let t1 = SystemTime::now();
println!("{:?}", img_median.size());
println!(
"time: {}s",
t1.duration_since(t0).unwrap().as_millis() as f64 / 1000.
);
}
}
Ok(Size_ { width: 9720, height: 11340 })
time: 0.924s
test tests::test_opencv ... ok
(9720, 11340)
time: 216.174s
test tests::test_image ... ok