use purecv::core::structural::{copy_make_border, flip, merge, repeat, rotate, split, transpose};
use purecv::core::{Matrix, Scalar};
fn main() {
println!("--- purecv Structural Operations Example ---");
let m = Matrix::<u8>::from_vec(2, 3, 1, vec![1, 2, 3, 4, 5, 6]);
println!("Original Matrix (2x3):\n{:?}", m.data);
let m_flip = flip(&m, 0).unwrap(); println!("\nFlipped Vertically:\n{:?}", m_flip.data);
let m_trans = transpose(&m).unwrap();
println!("\nTransposed (3x2):\n{:?}", m_trans.data);
let m_rot = rotate(&m, 0).unwrap(); println!("\nRotated 90 deg CW:\n{:?}", m_rot.data);
let m_rep = repeat(&m, 2, 2).unwrap();
println!("\nRepeated (4x6):\n{:?}", m_rep.data);
let m_border = copy_make_border(&m, 1, 1, 1, 1, 0, Scalar::all(255)).unwrap();
println!("\nConstant Border (white 255):\n{:?}", m_border.data);
let m_rgb = Matrix::<u8>::from_vec(
2,
2,
3,
vec![255, 0, 0, 0, 255, 0, 0, 0, 255, 255, 255, 255],
);
println!("\nRGB Matrix (2x2, 3ch):\n{:?}", m_rgb.data);
let planes = split(&m_rgb).unwrap();
println!("Red plane: {:?}", planes[0].data);
println!("Green plane: {:?}", planes[1].data);
println!("Blue plane: {:?}", planes[2].data);
let merged = merge(&planes).unwrap();
assert_eq!(m_rgb.data, merged.data);
println!("\nMerge successful! Data matches original RGB.");
println!("\nDone.");
}