imageproc icon indicating copy to clipboard operation
imageproc copied to clipboard

median_filter is two orders of magnitude slower than opencv::imgproc::median_blur.

Open wangm23456 opened this issue 1 year ago • 3 comments

#[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

wangm23456 avatar Jun 07 '23 03:06 wangm23456