Fully handle inner/outer determination and nesting in contour tracing
This commit is contained in:
1 parent
a7372d05c2
commit
7f29c5abbb
2 files changed
+63
-22
No files matched your search
+17
-10
@@ -15,22 +15,29 @@ const INNER: image::SRGBA = image::SRGBA {
|
||||
a: 1.0,
|
||||
};
|
||||
|
||||
fn draw(contour: &contour::Contour, img: &mut image::Image<image::SRGBA>) {
|
||||
let n = contour.vertices.len();
|
||||
for i in 0..n {
|
||||
let (x0, y0) = contour.vertices[i];
|
||||
let (x1, y1) = contour.vertices[(i + 1) % n];
|
||||
let colour = match contour.kind {
|
||||
contour::Kind::Outer => OUTER,
|
||||
contour::Kind::Inner => INNER,
|
||||
};
|
||||
draw::line(x0, y0, x1, y1, img, colour);
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> std::process::ExitCode {
|
||||
common::process_image(|mut img| {
|
||||
let greyscale = img.map(|p| image::Luminance::from(p));
|
||||
let thresholded = filter::threshold_auto(greyscale);
|
||||
let thresholded = filter::threshold_auto(greyscale);
|
||||
|
||||
let contours = contour::find(thresholded);
|
||||
for contour in contours {
|
||||
let n = contour.vertices.len();
|
||||
for i in 0..n {
|
||||
let (x0, y0) = contour.vertices[i];
|
||||
let (x1, y1) = contour.vertices[(i + 1) % n];
|
||||
draw::line(x0, y0, x1, y1, &mut img, match contour.kind {
|
||||
contour::Kind::Outer => OUTER,
|
||||
contour::Kind::Inner => INNER,
|
||||
});
|
||||
}
|
||||
draw(&contour, &mut img);
|
||||
}
|
||||
|
||||
img
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user