Skip to content

Commit dffedef

Browse files
committed
Update examples to make use of the new conditional macros
1 parent 39160b6 commit dffedef

File tree

7 files changed

+112
-77
lines changed

7 files changed

+112
-77
lines changed

ci/script.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ fi
7373
# remove tests and examples that require the latest OpenCV version so that they don't fail due to missing modules
7474
if [[ "${OPENCV_VERSION:-}" != "4.11.0" || "${OPENCV_VERSION:-}" != "5.0.0-alpha" ]]; then
7575
rm -vf tests/*_only_latest_opencv.rs
76-
rm -vf examples/dnn_face_detect.rs examples/text_detection.rs examples/camera_calibration.rs examples/hough_circle.rs
76+
rm -vf examples/dnn_face_detect.rs examples/text_detection.rs
7777
fi
7878

7979
echo "=== Current directory: $(pwd)"

examples/camera_calibration.rs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,24 @@
33
use std::error::Error;
44
use std::fs;
55

6-
use opencv::core::{no_array, Point2f, Point3f, Size, TermCriteria, TermCriteria_EPS, TermCriteria_MAX_ITER, Vector};
6+
use opencv::core::{
7+
no_array, Point2f, Point3f, Size, TermCriteria, TermCriteria_EPS, TermCriteria_MAX_ITER, TermCriteria_Type, Vector,
8+
};
79
use opencv::prelude::*;
8-
use opencv::{highgui, imgcodecs, imgproc, not_opencv_branch_5, opencv_branch_5};
10+
use opencv::{highgui, imgcodecs, imgproc, opencv_branch_34, opencv_branch_4, opencv_branch_5};
911

1012
opencv_branch_5! {
11-
use opencv::calib::{find_chessboard_corners_def, draw_chessboard_corners, calibrate_camera_def};
12-
use opencv::mod_3d::{undistort_def, init_undistort_rectify_map};
13+
use opencv::calib::{find_chessboard_corners_def, draw_chessboard_corners, calibrate_camera};
14+
use opencv::mod_3d::{undistort, init_undistort_rectify_map};
1315
}
1416

15-
not_opencv_branch_5! {
16-
use opencv::calib3d::{find_chessboard_corners_def, draw_chessboard_corners, calibrate_camera_def, undistort_def, init_undistort_rectify_map};
17+
opencv_branch_4! {
18+
use opencv::calib3d::{find_chessboard_corners_def, draw_chessboard_corners, calibrate_camera, undistort, init_undistort_rectify_map};
19+
}
20+
21+
opencv_branch_34! {
22+
use opencv::calib3d::{find_chessboard_corners_def, draw_chessboard_corners, calibrate_camera};
23+
use opencv::imgproc::{undistort, init_undistort_rectify_map};
1724
}
1825

1926
fn main() -> Result<(), Box<dyn Error>> {
@@ -59,19 +66,25 @@ fn main() -> Result<(), Box<dyn Error>> {
5966
let mut dist = Mat::default();
6067
let mut rvecs = Vector::<Mat>::new();
6168
let mut tvecs = Vector::<Mat>::new();
62-
calibrate_camera_def(
69+
calibrate_camera(
6370
&objpoints,
6471
&imgpoints,
6572
gray.size()?,
6673
&mut mtx,
6774
&mut dist,
6875
&mut rvecs,
6976
&mut tvecs,
77+
0,
78+
TermCriteria::new(
79+
i32::from(TermCriteria_Type::COUNT) + i32::from(TermCriteria_Type::EPS),
80+
30,
81+
f64::EPSILON,
82+
)?,
7083
)?;
7184

7285
// Using cv.undistort()
7386
let mut dst_undistort = Mat::default();
74-
undistort_def(&img, &mut dst_undistort, &mtx, &dist)?;
87+
undistort(&img, &mut dst_undistort, &mtx, &dist, &no_array())?;
7588
highgui::imshow("Result using undistort", &dst_undistort)?;
7689

7790
// Using remapping

examples/cuda.rs

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,30 @@ use std::time::Instant;
33

44
use opencv::core::Size;
55
use opencv::prelude::*;
6-
use opencv::{core, imgcodecs, imgproc, Result};
6+
use opencv::{imgcodecs, imgproc, opencv_has_inherent_feature_cuda, opencv_has_module_cudafilters, Result};
77

88
const ITERATIONS: usize = 100;
99

1010
fn main() -> Result<()> {
1111
let img_file = env::args().nth(1).expect("Please supply image file name");
1212

13-
let dev_count = core::get_cuda_enabled_device_count()?;
13+
let dev_count = opencv_has_inherent_feature_cuda! {
14+
{
15+
opencv::core::get_cuda_enabled_device_count()?
16+
} else {
17+
0
18+
}
19+
};
1420
let cuda_available = dev_count > 0;
1521
if cuda_available {
1622
for dev_num in 0..dev_count {
17-
core::print_short_cuda_device_info(dev_num)?;
23+
opencv_has_inherent_feature_cuda! {
24+
{
25+
opencv::core::print_short_cuda_device_info(dev_num)?;
26+
} else {
27+
println!("CUDA device {dev_num} is not available");
28+
}
29+
}
1830
}
1931
}
2032
println!(
@@ -37,29 +49,32 @@ fn main() -> Result<()> {
3749
imgproc::canny_def(&blurred, &mut edges, 0., 50.)?;
3850
}
3951
println!("{:#?}", start.elapsed());
40-
#[cfg(all(ocvrs_has_module_cudafilters, ocvrs_has_module_cudaimgproc))]
4152
if cuda_available {
42-
use opencv::core::GpuMat;
43-
use opencv::{cudafilters, cudaimgproc};
53+
opencv_has_module_cudafilters! {
54+
opencv::opencv_has_module_cudaimgproc! {
55+
use opencv::core::{GpuMat, Stream};
56+
use opencv::{cudafilters, cudaimgproc};
4457

45-
println!("Timing CUDA implementation... ");
46-
let img = imgcodecs::imread_def(&img_file)?;
47-
let mut img_gpu = GpuMat::new_def()?;
48-
img_gpu.upload(&img)?;
49-
let mut stream = core::Stream::default()?;
50-
let start = Instant::now();
51-
for _ in 0..ITERATIONS {
52-
let mut gray = GpuMat::new_def()?;
53-
cudaimgproc::cvt_color(&img_gpu, &mut gray, imgproc::COLOR_BGR2GRAY, 0, &mut stream)?;
54-
let mut blurred = GpuMat::new_def()?;
55-
let mut filter = cudafilters::create_gaussian_filter_def(gray.typ()?, blurred.typ()?, Size::new(7, 7), 1.5)?;
56-
filter.apply(&gray, &mut blurred, &mut stream)?;
57-
let mut edges = GpuMat::new_def()?;
58-
let mut detector = cudaimgproc::create_canny_edge_detector_def(0., 50.)?;
59-
detector.detect(&blurred, &mut edges, &mut stream)?;
60-
stream.wait_for_completion()?;
58+
println!("Timing CUDA implementation... ");
59+
let img = imgcodecs::imread_def(&img_file)?;
60+
let mut img_gpu = GpuMat::new_def()?;
61+
img_gpu.upload(&img)?;
62+
let mut stream = Stream::default()?;
63+
let start = Instant::now();
64+
for _ in 0..ITERATIONS {
65+
let mut gray = GpuMat::new_def()?;
66+
cudaimgproc::cvt_color(&img_gpu, &mut gray, imgproc::COLOR_BGR2GRAY, 0, &mut stream)?;
67+
let mut blurred = GpuMat::new_def()?;
68+
let mut filter = cudafilters::create_gaussian_filter_def(gray.typ()?, blurred.typ()?, Size::new(7, 7), 1.5)?;
69+
filter.apply(&gray, &mut blurred, &mut stream)?;
70+
let mut edges = GpuMat::new_def()?;
71+
let mut detector = cudaimgproc::create_canny_edge_detector_def(0., 50.)?;
72+
detector.detect(&blurred, &mut edges, &mut stream)?;
73+
stream.wait_for_completion()?;
74+
}
75+
println!("{:#?}", start.elapsed());
76+
}
6177
}
62-
println!("{:#?}", start.elapsed());
6378
}
6479
Ok(())
6580
}

examples/gapi_api_example.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::env;
44

55
use opencv::prelude::*;
66
use opencv::videoio::{VideoCapture, CAP_ANY};
7-
use opencv::Result;
7+
use opencv::{opencv_has_module_gapi, Result};
88

99
fn main() -> Result<()> {
1010
let mut cap = VideoCapture::default()?;
@@ -15,8 +15,7 @@ fn main() -> Result<()> {
1515
cap.open(0, CAP_ANY)?;
1616
}
1717
assert!(cap.is_opened()?);
18-
#[cfg(ocvrs_has_module_gapi)]
19-
{
18+
opencv_has_module_gapi! {
2019
use opencv::core::{Point, Scalar, Size, Vector, BORDER_DEFAULT};
2120
use opencv::gapi::GMat;
2221
use opencv::imgproc::INTER_LINEAR;

examples/hough_circle.rs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,22 @@ use std::env::args;
44
use std::sync::atomic::{AtomicI32, Ordering};
55
use std::sync::Arc;
66

7-
use opencv::core::{find_file, AlgorithmHint, Point, Point2i, Size2i, Vec3f, Vector, BORDER_DEFAULT};
7+
use opencv::core::{find_file, Point, Point2i, Size2i, Vec3f, Vector, BORDER_DEFAULT};
88
use opencv::highgui::{create_trackbar, imshow, named_window, wait_key, WINDOW_AUTOSIZE};
99
use opencv::imgcodecs::{imread, IMREAD_COLOR};
1010
use opencv::imgproc::{circle, cvt_color_def, gaussian_blur, hough_circles, COLOR_BGR2GRAY, HOUGH_GRADIENT};
1111
use opencv::prelude::*;
12-
use opencv::Result;
12+
use opencv::{opencv_has_inherent_feature_algorithm_hint, Result};
1313

1414
opencv::not_opencv_branch_34! {
15-
use opencv::imgproc::LINE_8;
15+
use opencv::imgproc::LINE_8;
1616
}
1717
opencv::opencv_branch_34! {
18-
use opencv::core::LINE_8;
18+
use opencv::core::LINE_8;
19+
}
20+
21+
opencv_has_inherent_feature_algorithm_hint! {
22+
use opencv::core::AlgorithmHint;
1923
}
2024

2125
// Windows and trackbars names
@@ -89,15 +93,13 @@ fn main() -> Result<()> {
8993

9094
// Reduce the noise so we avoid false circle detection
9195
let mut src_gray_blur = Mat::default();
92-
gaussian_blur(
93-
&src_gray,
94-
&mut src_gray_blur,
95-
Size2i::new(9, 9),
96-
2.0,
97-
2.0,
98-
BORDER_DEFAULT,
99-
AlgorithmHint::ALGO_HINT_DEFAULT,
100-
)?;
96+
opencv_has_inherent_feature_algorithm_hint! {
97+
{
98+
gaussian_blur(&src_gray, &mut src_gray_blur, Size2i::new(9, 9), 2.0, 2.0, BORDER_DEFAULT, AlgorithmHint::ALGO_HINT_DEFAULT)?;
99+
} else {
100+
gaussian_blur(&src_gray, &mut src_gray_blur, Size2i::new(9, 9), 2.0, 2.0, BORDER_DEFAULT)?;
101+
}
102+
}
101103

102104
// Declare and initialize both parameters that are subjects to change
103105
let canny_threshold: Arc<AtomicI32> = Arc::new(AtomicI32::new(CANNY_THRESHOLD_INIT_VAL));

examples/opencl.rs

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
use opencv::Result;
1+
use opencv::{opencv_has_inherent_feature_opencl, Result};
22

3-
#[cfg(ocvrs_has_inherent_feature_opencl)]
43
fn main() -> Result<()> {
54
use std::{env, time};
65

7-
use opencv::core::{Device, Size, UMat, Vector};
6+
use opencv::core::{Size, UMat};
87
use opencv::prelude::*;
9-
use opencv::{core, imgcodecs, imgproc};
8+
use opencv::{imgcodecs, imgproc};
109

1110
opencv::not_opencv_branch_34! {
1211
use opencv::core::AccessFlag::ACCESS_READ;
@@ -17,23 +16,37 @@ fn main() -> Result<()> {
1716

1817
const ITERATIONS: usize = 100;
1918
let img_file = env::args().nth(1).expect("Please supply image file name");
20-
let opencl_have = core::have_opencl()?;
21-
if opencl_have {
22-
core::set_use_opencl(true)?;
23-
let mut platforms = Vector::new();
24-
core::get_platfoms_info(&mut platforms)?;
25-
for (platf_num, platform) in platforms.into_iter().enumerate() {
26-
println!("Platform #{}: {}", platf_num, platform.name()?);
27-
for dev_num in 0..platform.device_number()? {
28-
let mut dev = Device::default();
29-
platform.get_device(&mut dev, dev_num)?;
30-
println!(" OpenCL device #{}: {}", dev_num, dev.name()?);
31-
println!(" vendor: {}", dev.vendor_name()?);
32-
println!(" version: {}", dev.version()?);
19+
let opencl_have = opencv_has_inherent_feature_opencl! {
20+
{
21+
opencv::core::have_opencl()?
22+
} else {
23+
false
24+
}
25+
};
26+
opencv_has_inherent_feature_opencl! {
27+
if opencl_have {
28+
opencv::core::set_use_opencl(true)?;
29+
let mut platforms = opencv::core::Vector::new();
30+
opencv::core::get_platfoms_info(&mut platforms)?;
31+
for (platf_num, platform) in platforms.into_iter().enumerate() {
32+
println!("Platform #{}: {}", platf_num, platform.name()?);
33+
for dev_num in 0..platform.device_number()? {
34+
let mut dev = opencv::core::Device::default();
35+
platform.get_device(&mut dev, dev_num)?;
36+
println!(" OpenCL device #{dev_num}: {}", dev.name()?);
37+
println!(" vendor: {}", dev.vendor_name()?);
38+
println!(" version: {}", dev.version()?);
39+
}
3340
}
3441
}
3542
}
36-
let opencl_use = core::use_opencl()?;
43+
let opencl_use = opencv_has_inherent_feature_opencl! {
44+
{
45+
opencv::core::use_opencl()?
46+
} else {
47+
false
48+
}
49+
};
3750
println!(
3851
"OpenCL is {} and {}",
3952
if opencl_have {
@@ -76,10 +89,3 @@ fn main() -> Result<()> {
7689
}
7790
Ok(())
7891
}
79-
80-
#[cfg(not(ocvrs_has_inherent_feature_opencl))]
81-
fn main() -> Result<()> {
82-
eprintln!("This example requires that OpenCV is build with OpenCL support:");
83-
eprintln!("{}", opencv::core::get_build_information()?);
84-
Ok(())
85-
}

tests/opencl.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
use opencv::{core, Result};
1+
use opencv::Result;
22

33
#[test]
44
fn convert_type_str() -> Result<()> {
55
#[cfg(ocvrs_has_inherent_feature_opencl)]
6-
if core::have_opencl()? {
6+
if opencv::core::have_opencl()? {
77
// this function writes to buf argument and returns it
88
let mut test = "test".to_string();
9-
assert_eq!("noconvert", core::convert_type_str(1, 1, 1, &mut test)?);
9+
assert_eq!("noconvert", opencv::core::convert_type_str(1, 1, 1, &mut test)?);
1010
assert_eq!("", test);
11-
assert_eq!("convert_ushort_sat", core::convert_type_str(1, 2, 1, &mut test)?);
11+
assert_eq!("convert_ushort_sat", opencv::core::convert_type_str(1, 2, 1, &mut test)?);
1212
assert_eq!("convert_ushort_sat", test);
1313
}
1414
Ok(())

0 commit comments

Comments
 (0)