Skip to content

Commit

Permalink
Cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
twistedfall committed Apr 15, 2024
1 parent 498c8ec commit ac00c4c
Show file tree
Hide file tree
Showing 8 changed files with 111 additions and 124 deletions.
16 changes: 11 additions & 5 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
version: 2
updates:
- package-ecosystem: cargo
directory: "/"
schedule:
interval: daily
open-pull-requests-limit: 10
- package-ecosystem: "cargo"
directory: "/"
schedule:
interval: "daily"
open-pull-requests-limit: 10

- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
open-pull-requests-limit: 10
2 changes: 1 addition & 1 deletion binding-generator/src/writer/rust_native/class.rs
Original file line number Diff line number Diff line change
Expand Up @@ -483,7 +483,7 @@ fn extern_functions<'tu, 'ge>(c: &Class<'tu, 'ge>) -> Vec<Func<'tu, 'ge>> {
out
}

fn needs_default_ctor<'r>(c: &Class, kind: ClassKind) -> bool {
fn needs_default_ctor(c: &Class, kind: ClassKind) -> bool {
kind.is_boxed() && !c.is_abstract() && c.has_implicit_default_constructor()
}

Expand Down
2 changes: 1 addition & 1 deletion ci/script.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ elif [[ "$OS_FAMILY" == "macOS" ]]; then
xcode_select="xcode-select" # IDEA code highlighting workaround
toolchain_path="$($xcode_select --print-path)/Toolchains/XcodeDefault.xctoolchain/"
export DYLD_FALLBACK_LIBRARY_PATH="$toolchain_path/usr/lib/"
if [[ "${VCPKG_VERSION:-}" != "" ]]; then
if [[ "${VCPKG_VERSION:-}" != "" ]]; then # vcpkg build
export VCPKG_ROOT="$HOME/build/vcpkg"
echo "=== Installed vcpkg packages:"
"$VCPKG_ROOT/vcpkg" list
Expand Down
2 changes: 1 addition & 1 deletion examples/cuda.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ fn main() -> Result<()> {
let mut gray = Mat::default();
imgproc::cvt_color(&img, &mut gray, imgproc::COLOR_BGR2GRAY, 0)?;
let mut blurred = Mat::default();
imgproc::gaussian_blur(&gray, &mut blurred, core::Size::new(7, 7), 1.5, 0., core::BORDER_DEFAULT)?;
imgproc::gaussian_blur(&gray, &mut blurred, Size::new(7, 7), 1.5, 0., core::BORDER_DEFAULT)?;
let mut edges = Mat::default();
imgproc::canny(&blurred, &mut edges, 0., 50., 3, false)?;
}
Expand Down
1 change: 1 addition & 0 deletions examples/dnn_face_detect.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
//! Port of https://github.com/opencv/opencv/blob/4.9.0/samples/dnn/face_detect.cpp
//! Tutorial: https://docs.opencv.org/4.9.0/d0/dd4/tutorial_dnn_face.html

use std::env;

Expand Down
32 changes: 16 additions & 16 deletions examples/opencl.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use std::{env, time};

use opencv::core::{UMat, UMatUsageFlags};
use opencv::core::{Device, Size, UMat, Vector};
use opencv::prelude::*;
use opencv::{core, imgcodecs, imgproc, types, Result};
use opencv::{core, imgcodecs, imgproc, Result};

opencv::opencv_branch_4! {
use opencv::core::AccessFlag::ACCESS_READ;
Expand All @@ -18,12 +18,12 @@ fn main() -> Result<()> {
let opencl_have = core::have_opencl()?;
if opencl_have {
core::set_use_opencl(true)?;
let mut platforms = types::VectorOfPlatformInfo::new();
let mut platforms = Vector::new();
core::get_platfoms_info(&mut platforms)?;
for (platf_num, platform) in platforms.into_iter().enumerate() {
println!("Platform #{}: {}", platf_num, platform.name()?);
for dev_num in 0..platform.device_number()? {
let mut dev = core::Device::default();
let mut dev = Device::default();
platform.get_device(&mut dev, dev_num)?;
println!(" OpenCL device #{}: {}", dev_num, dev.name()?);
println!(" vendor: {}", dev.vendor_name()?);
Expand All @@ -46,29 +46,29 @@ fn main() -> Result<()> {
},
);
println!("Timing CPU implementation... ");
let img = imgcodecs::imread(&img_file, imgcodecs::IMREAD_COLOR)?;
let img = imgcodecs::imread_def(&img_file)?;
let start = time::Instant::now();
for _ in 0..ITERATIONS {
let mut gray = Mat::default();
imgproc::cvt_color(&img, &mut gray, imgproc::COLOR_BGR2GRAY, 0)?;
imgproc::cvt_color_def(&img, &mut gray, imgproc::COLOR_BGR2GRAY)?;
let mut blurred = Mat::default();
imgproc::gaussian_blur(&gray, &mut blurred, core::Size::new(7, 7), 1.5, 0., core::BORDER_DEFAULT)?;
imgproc::gaussian_blur_def(&gray, &mut blurred, Size::new(7, 7), 1.5)?;
let mut edges = Mat::default();
imgproc::canny(&blurred, &mut edges, 0., 50., 3, false)?;
imgproc::canny_def(&blurred, &mut edges, 0., 50.)?;
}
println!("{:#?}", start.elapsed());
if opencl_use {
println!("Timing OpenCL implementation... ");
let mat = imgcodecs::imread(&img_file, imgcodecs::IMREAD_COLOR)?;
let img = mat.get_umat(ACCESS_READ, UMatUsageFlags::USAGE_DEFAULT)?;
let mat = imgcodecs::imread_def(&img_file)?;
let img = mat.get_umat_def(ACCESS_READ)?;
let start = time::Instant::now();
for _ in 0..ITERATIONS {
let mut gray = UMat::new(UMatUsageFlags::USAGE_DEFAULT);
imgproc::cvt_color(&img, &mut gray, imgproc::COLOR_BGR2GRAY, 0)?;
let mut blurred = UMat::new(UMatUsageFlags::USAGE_DEFAULT);
imgproc::gaussian_blur(&gray, &mut blurred, core::Size::new(7, 7), 1.5, 0., core::BORDER_DEFAULT)?;
let mut edges = UMat::new(UMatUsageFlags::USAGE_DEFAULT);
imgproc::canny(&blurred, &mut edges, 0., 50., 3, false)?;
let mut gray = UMat::new_def();
imgproc::cvt_color_def(&img, &mut gray, imgproc::COLOR_BGR2GRAY)?;
let mut blurred = UMat::new_def();
imgproc::gaussian_blur_def(&gray, &mut blurred, Size::new(7, 7), 1.5)?;
let mut edges = UMat::new_def();
imgproc::canny_def(&blurred, &mut edges, 0., 50.)?;
}
println!("{:#?}", start.elapsed());
}
Expand Down
177 changes: 79 additions & 98 deletions examples/warp_perspective_demo.rs
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
//! Port of https://github.com/opencv/opencv/blob/4.9.0/samples/cpp/warpPerspective_demo.cpp

use std::env;
use std::error::Error;
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::{Arc, Mutex};

use opencv::core::{Point, Size};
use opencv::core::{Point2f, Size, Vector};
use opencv::prelude::*;
use opencv::types::VectorOfPoint;
use opencv::{calib3d, core, highgui, imgcodecs, imgproc};
use opencv::{core, highgui, imgcodecs, imgproc, not_opencv_branch_4, opencv_branch_4};

opencv::opencv_branch_4! {
opencv_branch_4! {
use opencv::imgproc::LINE_8;
}
opencv::not_opencv_branch_4! {
not_opencv_branch_4! {
use opencv::core::LINE_8;
}

Expand All @@ -38,10 +39,11 @@ static WINDOW_TITLE: &str = "Perspective Transformation Demo";
static LABELS: [&str; 4] = ["TL", "TR", "BR", "BL"];

fn main() -> Result<(), Box<dyn Error>> {
let roi_corners = Arc::new(Mutex::new(VectorOfPoint::new()));
let mut dst_corners = VectorOfPoint::with_capacity(4);
let roi_corners = Arc::new(Mutex::new(Vector::<Point2f>::new()));
let mut midpoints = [Point2f::default(); 4];
let mut dst_corners = Vector::<Point2f>::with_capacity(4);
for _ in 0..4 {
dst_corners.push(Point::default());
dst_corners.push(Point2f::default());
}
let validation_needed = Arc::new(AtomicBool::new(true));

Expand All @@ -54,22 +56,10 @@ fn main() -> Result<(), Box<dyn Error>> {
let original_image_rows = original_image.rows() as f32;
{
let mut roi_corners = roi_corners.lock().unwrap();
roi_corners.push(Point::new(
(original_image_cols / 1.7) as i32,
(original_image_rows / 4.2) as i32,
));
roi_corners.push(Point::new(
(original_image_cols / 1.15) as i32,
(original_image_rows / 3.32) as i32,
));
roi_corners.push(Point::new(
(original_image_cols / 1.33) as i32,
(original_image_rows / 1.1) as i32,
));
roi_corners.push(Point::new(
(original_image_cols / 1.93) as i32,
(original_image_rows / 1.36) as i32,
));
roi_corners.push(Point2f::new(original_image_cols / 1.7, original_image_rows / 4.2));
roi_corners.push(Point2f::new(original_image_cols / 1.15, original_image_rows / 3.32));
roi_corners.push(Point2f::new(original_image_cols / 1.33, original_image_rows / 1.1));
roi_corners.push(Point2f::new(original_image_cols / 1.93, original_image_rows / 1.36));
}
highgui::named_window(WINDOW_TITLE, highgui::WINDOW_NORMAL)?;
highgui::named_window_def("Warped Image")?;
Expand All @@ -83,29 +73,28 @@ fn main() -> Result<(), Box<dyn Error>> {
let roi_corners = Arc::clone(&roi_corners);
let validation_needed = Arc::clone(&validation_needed);
move |event, x, y, _flags| {
{
let mut roi_corners = roi_corners.lock().unwrap();
// Action when left button is pressed
if roi_corners.len() == 4 {
for (i, roi_corner) in roi_corners.iter().enumerate() {
if event == highgui::EVENT_LBUTTONDOWN && (roi_corner.x - x).abs() < 10 && (roi_corner.y - y).abs() < 10 {
selected_corner_index = i;
dragging = true;
}
let (x, y) = (x as f32, y as f32);
let mut roi_corners = roi_corners.lock().unwrap();
// Action when left button is pressed
if roi_corners.len() == 4 {
for (i, roi_corner) in roi_corners.iter().enumerate() {
if event == highgui::EVENT_LBUTTONDOWN && (roi_corner.x - x).abs() < 10. && (roi_corner.y - y).abs() < 10. {
selected_corner_index = i;
dragging = true;
}
} else if event == highgui::EVENT_LBUTTONDOWN {
roi_corners.push(Point::new(x, y));
validation_needed.store(true, Ordering::Relaxed);
}
// Action when left button is released
if event == highgui::EVENT_LBUTTONUP {
dragging = false;
}
// Action when left button is pressed and mouse has moved over the window
if event == highgui::EVENT_MOUSEMOVE && dragging {
roi_corners.set(selected_corner_index, Point::new(x, y)).unwrap();
validation_needed.store(true, Ordering::Relaxed);
}
} else if event == highgui::EVENT_LBUTTONDOWN {
roi_corners.push(Point2f::new(x, y));
validation_needed.store(true, Ordering::Relaxed);
}
// Action when left button is released
if event == highgui::EVENT_LBUTTONUP {
dragging = false;
}
// Action when left button is pressed and mouse has moved over the window
if event == highgui::EVENT_MOUSEMOVE && dragging {
roi_corners.set(selected_corner_index, Point2f::new(x, y)).unwrap();
validation_needed.store(true, Ordering::Relaxed);
}
}
})),
Expand All @@ -119,11 +108,12 @@ fn main() -> Result<(), Box<dyn Error>> {
{
let roi_corners = roi_corners.lock().unwrap();
for (i, roi_corner) in roi_corners.iter().enumerate() {
let roi_corner = roi_corner.to::<i32>().ok_or("Can't cast to Point")?;
imgproc::circle(&mut image, roi_corner, 5, (0, 255, 0).into(), 3, LINE_8, 0)?;
if i > 0 {
imgproc::line(
&mut image,
roi_corners.get(i - 1)?,
roi_corners.get(i - 1)?.to::<i32>().ok_or("Can't cast to Point")?,
roi_corner,
(0, 0, 255).into(),
2,
Expand Down Expand Up @@ -152,10 +142,11 @@ fn main() -> Result<(), Box<dyn Error>> {
{
let roi_corners = roi_corners.lock().unwrap();
for (i, roi_corner) in roi_corners.iter().enumerate() {
let roi_corner = roi_corner.to::<i32>().ok_or("Can't cast to Point")?;
imgproc::line(
&mut image,
roi_corner,
roi_corners.get((i + 1) % 4)?,
roi_corners.get((i + 1) % 4)?.to::<i32>().ok_or("Can't cast to Point")?,
(0, 0, 255).into(),
2,
LINE_8,
Expand All @@ -175,65 +166,55 @@ fn main() -> Result<(), Box<dyn Error>> {
)?;
}
highgui::imshow(WINDOW_TITLE, &image)?;
dst_corners.set(0, Point::new(0, 0))?;
dst_corners.set(
1,
Point::new(
(roi_corners.get(0)? - roi_corners.get(1)?)
.norm()
.max((roi_corners.get(2)? - roi_corners.get(3)?).norm()) as i32,
0,
),
)?;

midpoints[0] = (roi_corners.get(0)? + roi_corners.get(1)?) / 2.;
midpoints[1] = (roi_corners.get(1)? + roi_corners.get(2)?) / 2.;
midpoints[2] = (roi_corners.get(2)? + roi_corners.get(3)?) / 2.;
midpoints[3] = (roi_corners.get(3)? + roi_corners.get(0)?) / 2.;

dst_corners.set(0, Point2f::new(0., 0.))?;
dst_corners.set(1, Point2f::new((midpoints[1] - midpoints[3]).norm() as f32, 0.))?;
dst_corners.set(
2,
Point::new(
(roi_corners.get(0)? - roi_corners.get(1)?)
.norm()
.max((roi_corners.get(2)? - roi_corners.get(3)?).norm()) as i32,
(roi_corners.get(1)? - roi_corners.get(2)?)
.norm()
.max((roi_corners.get(3)? - roi_corners.get(0)?).norm()) as i32,
),
Point2f::new(dst_corners.get(1)?.x, (midpoints[0] - midpoints[2]).norm() as f32),
)?;
dst_corners.set(
3,
Point::new(
0,
(roi_corners.get(1)? - roi_corners.get(2)?)
.norm()
.max((roi_corners.get(3)? - roi_corners.get(0)?).norm()) as i32,
),
)?;
let warped_image_size = Size::new(dst_corners.get(2)?.x, dst_corners.get(2)?.y);
let roi_corners_mat = Mat::from_exact_iter(roi_corners.iter())?;
let dst_corners_mat = Mat::from_exact_iter(dst_corners.iter())?;
let h = calib3d::find_homography_def(&roi_corners_mat, &dst_corners_mat, &mut Mat::default())?; //get homography
dst_corners.set(3, Point2f::new(0., dst_corners.get(2)?.y))?;
let warped_image_size = Size::new(dst_corners.get(2)?.x.round() as i32, dst_corners.get(2)?.y.round() as i32);
let roi_corners_mat = Mat::from_slice(roi_corners.as_slice())?;
let dst_corners_mat = Mat::from_slice(dst_corners.as_slice())?;
not_opencv_branch_4! {
let m = imgproc::get_perspective_transform(&roi_corners_mat, &dst_corners_mat)?;
}
opencv_branch_4! {
let m = imgproc::get_perspective_transform_def(&roi_corners_mat, &dst_corners_mat)?;
}
let mut warped_image = Mat::default();
imgproc::warp_perspective_def(&original_image, &mut warped_image, &h, warped_image_size)?; // do perspective transformation
imgproc::warp_perspective_def(&original_image, &mut warped_image, &m, warped_image_size)?; // do perspective transformation
highgui::imshow("Warped Image", &warped_image)?;
}
}
let c = char::from(u8::try_from(highgui::wait_key(10)?)?);
if c == 'q' || c == 'Q' || c == '\x1B' {
end_program = true;
}
if c == 'c' || c == 'C' {
roi_corners.lock().unwrap().clear();
}
if c == 'r' || c == 'R' {
{
let mut roi_corners = roi_corners.lock().unwrap();
let t = roi_corners.get(0)?;
roi_corners.push(t);
roi_corners.remove(0)?;
if let Ok(c) = u8::try_from(highgui::wait_key(10)?) {
let c = char::from(c);
if c == 'q' || c == 'Q' || c == '\x1B' {
end_program = true;
}
}
if c == 'i' || c == 'I' {
{
let mut roi_corners = roi_corners.lock().unwrap();
roi_corners.swap(0, 1)?;
roi_corners.swap(2, 3)?;
if c == 'c' || c == 'C' {
roi_corners.lock().unwrap().clear();
}
if c == 'r' || c == 'R' {
{
let mut roi_corners = roi_corners.lock().unwrap();
let t = roi_corners.get(0)?;
roi_corners.push(t);
roi_corners.remove(0)?;
}
}
if c == 'i' || c == 'I' {
{
let mut roi_corners = roi_corners.lock().unwrap();
roi_corners.swap(0, 1)?;
roi_corners.swap(2, 3)?;
}
}
}
}
Expand Down
3 changes: 1 addition & 2 deletions src/manual/core/mat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -191,12 +191,11 @@ impl Mat {
));
}
unsafe {
Self::new_rows_cols_with_data(
Self::new_rows_cols_with_data_def(
row_count_i32(row_count)?,
col_count_i32(col_count)?,
T::opencv_type(),
s.as_ptr().cast::<c_void>().cast_mut(),
core::Mat_AUTO_STEP,
)
}?
.try_clone()
Expand Down

0 comments on commit ac00c4c

Please sign in to comment.