benchmarks comparing the rust image processing ecosystem
Diffstat (limited to 'benches/affine.rs')
| -rw-r--r-- | benches/affine.rs | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/benches/affine.rs b/benches/affine.rs index 9daa7d3..99e0f13 100644 --- a/benches/affine.rs +++ b/benches/affine.rs @@ -1,6 +1,8 @@ -//! note that imageproc doesnt support in-place transformations. +#![feature(array_chunks)] +//! note that image doesnt support in-place transformations. use fimg::Image; use image::{imageops, RgbImage}; +use opencv::{core::CV_8UC3, prelude::*}; const SIZE: u32 = 5424; // dont have to alloc, but it would be less fair. @@ -8,6 +10,31 @@ pub fn fimg() -> Image<Vec<u8>, 3> { Image::build(SIZE, SIZE).buf(iai::black_box(include_bytes!("../data.imgbuf").to_vec())) } +pub fn opencv() -> Mat { + opencv::core::set_num_threads(1).unwrap(); + let mut data = iai::black_box(include_bytes!("../data.imgbuf").to_vec()) + .array_chunks::<3>() + .flat_map(|&[r, g, b]| [b, g, r]) + .collect::<Vec<_>>(); + let mat = unsafe { + Mat::new_size_with_data_def( + opencv::core::Size_ { + width: 5424, + height: 5424, + }, + CV_8UC3, + data.as_mut_ptr() as *mut core::ffi::c_void, + ) + .unwrap() + }; + std::mem::forget(data); + mat +} + +pub fn o_opencv() -> Mat { + unsafe { Mat::new_rows_cols(SIZE as i32, SIZE as i32, CV_8UC3).unwrap() } +} + pub fn ipimg() -> RgbImage { RgbImage::from_raw( SIZE, @@ -25,6 +52,12 @@ pub fn rot_90_imgproc() { iai::black_box(imageops::rotate90(&ipimg())); } +pub fn rot_90_opencv() { + let mut o = o_opencv(); + opencv::core::rotate(&opencv(), &mut o, 0).unwrap(); + iai::black_box(o); +} + pub fn rot_180_fimg() { iai::black_box(fimg().cloner().rot_180()); } @@ -33,6 +66,12 @@ pub fn rot_180_imgproc() { iai::black_box(imageops::rotate180(&ipimg())); } +pub fn rot_180_opencv() { + let mut o = o_opencv(); + opencv::core::rotate(&opencv(), &mut o, 1).unwrap(); + iai::black_box(o); +} + pub fn rot_270_fimg() { iai::black_box(unsafe { fimg().cloner().rot_270() }); } @@ -41,6 +80,12 @@ pub fn rot_270_imgproc() { iai::black_box(imageops::rotate270(&ipimg())); } +pub fn rot_270_opencv() { + let mut o = o_opencv(); + opencv::core::rotate(&opencv(), &mut o, -1).unwrap(); + iai::black_box(o); +} + pub fn flip_h_fimg() { iai::black_box(fimg().cloner().flip_h()); } @@ -49,6 +94,12 @@ pub fn flip_h_imgproc() { iai::black_box(imageops::flip_horizontal(&ipimg())); } +pub fn flip_h_opencv() { + let mut o = o_opencv(); + opencv::core::flip(&opencv(), &mut o, 1).unwrap(); + iai::black_box(o); +} + pub fn flip_v_fimg() { iai::black_box(fimg().cloner().flip_h()); } @@ -57,15 +108,26 @@ pub fn flip_v_imgproc() { iai::black_box(imageops::flip_vertical(&ipimg())); } +pub fn flip_v_opencv() { + let mut o = o_opencv(); + opencv::core::flip(&opencv(), &mut o, 0).unwrap(); + iai::black_box(o); +} + iai::main!( rot_90_fimg, rot_90_imgproc, + rot_90_opencv, rot_180_fimg, rot_180_imgproc, + rot_180_opencv, rot_270_fimg, rot_270_imgproc, + rot_270_opencv, flip_h_fimg, flip_h_imgproc, + flip_h_opencv, flip_v_fimg, flip_v_imgproc, + flip_v_opencv, ); |