Crates.io | libstacker |
lib.rs | libstacker |
version | 0.0.7 |
source | src |
created_at | 2021-10-30 13:25:07.405358 |
updated_at | 2023-10-24 22:44:10.882181 |
description | Image alignment and stacking functions based on OpenCV and Rayon |
homepage | |
repository | https://github.com/eadf/libstacker.rs |
max_upload_size | |
id | 474389 |
size | 50,491 |
A multithreaded port of the python code found here: github.com/maitek/image_stacking
This crate contains multithreaded functions that aligns and stacks images using OpenCV and Rayon.
Read more about image alignment with OpenCV here.
git clone https://github.com/maitek/image_stacking image_stacking_py
Opencv-rust can be little tricky to install. Follow the instructions from rust opencv
You will need the "clang-runtime" feature if you experience problems with your clang environment .
cargo build --release
or
cargo build --release --features "clang-runtime"
cargo run --example main --release
or
cargo run --example main --release --features "clang-runtime"
and then wait a few seconds. The program should sort the images by quality, drop the least sharp image, and align and stack the rest. The result should be two windows showing the stacked images using two different alignment methods.
let keypoint_match_img:opencv::core::Mat = keypoint_match(
// a Vec<PathBuf> containing paths to image files
collect_image_files(&PathBuf::from("image_stacking_py/images"))?,
KeyPointMatchParameters {
method: opencv::calib3d::RANSAC,
ransac_reproj_threshold: 5.0,
},
)?;
Depending on the parameters the ecc_match()
is much slower, but also more accurate.
let ecc_match_img:opencv::core::Mat = ecc_match(
// a Vec<PathBuf> containing paths to image files
collect_image_files(&PathBuf::from("image_stacking_py/images"))?,
EccMatchParameters {
motion_type: MotionType::Homography,
max_count: Some(5000),
epsilon: Some(1e-5),
gauss_filt_size: 5,
},
)?;
.reshape()
in keypoint_match()
sharpness_tenengrad()
function. Mat not square?Licensed under either of
at your option.