Skip to content

Commit 268ee6f

Browse files
committed
Update examples to make use of the new conditional macros
1 parent d91a515 commit 268ee6f

File tree

7 files changed

+105
-78
lines changed

7 files changed

+105
-78
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: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,25 @@ 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+
#[allow(unused_mut, unused_assignments)]
14+
let mut dev_count = 0;
15+
opencv_has_inherent_feature_cuda! {
16+
dev_count = opencv::core::get_cuda_enabled_device_count()?;
17+
}
1418
let cuda_available = dev_count > 0;
1519
if cuda_available {
20+
#[allow(unused_variables)]
1621
for dev_num in 0..dev_count {
17-
core::print_short_cuda_device_info(dev_num)?;
22+
opencv_has_inherent_feature_cuda! {
23+
opencv::core::print_short_cuda_device_info(dev_num)?;
24+
}
1825
}
1926
}
2027
println!(
@@ -37,29 +44,32 @@ fn main() -> Result<()> {
3744
imgproc::canny_def(&blurred, &mut edges, 0., 50.)?;
3845
}
3946
println!("{:#?}", start.elapsed());
40-
#[cfg(all(ocvrs_has_module_cudafilters, ocvrs_has_module_cudaimgproc))]
41-
if cuda_available {
42-
use opencv::core::GpuMat;
43-
use opencv::{cudafilters, cudaimgproc};
47+
opencv_has_module_cudafilters! {
48+
opencv::opencv_has_module_cudaimgproc! {
49+
if cuda_available {
50+
use opencv::core::{GpuMat, Stream};
51+
use opencv::{cudafilters, cudaimgproc};
4452

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()?;
53+
println!("Timing CUDA implementation... ");
54+
let img = imgcodecs::imread_def(&img_file)?;
55+
let mut img_gpu = GpuMat::new_def()?;
56+
img_gpu.upload(&img)?;
57+
let mut stream = Stream::default()?;
58+
let start = Instant::now();
59+
for _ in 0..ITERATIONS {
60+
let mut gray = GpuMat::new_def()?;
61+
cudaimgproc::cvt_color(&img_gpu, &mut gray, imgproc::COLOR_BGR2GRAY, 0, &mut stream)?;
62+
let mut blurred = GpuMat::new_def()?;
63+
let mut filter = cudafilters::create_gaussian_filter_def(gray.typ()?, blurred.typ()?, Size::new(7, 7), 1.5)?;
64+
filter.apply(&gray, &mut blurred, &mut stream)?;
65+
let mut edges = GpuMat::new_def()?;
66+
let mut detector = cudaimgproc::create_canny_edge_detector_def(0., 50.)?;
67+
detector.detect(&blurred, &mut edges, &mut stream)?;
68+
stream.wait_for_completion()?;
69+
}
70+
println!("{:#?}", start.elapsed());
71+
}
6172
}
62-
println!("{:#?}", start.elapsed());
6373
}
6474
Ok(())
6575
}

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: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,21 @@ 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};
10-
use opencv::imgproc::{circle, cvt_color_def, gaussian_blur, hough_circles, COLOR_BGR2GRAY, HOUGH_GRADIENT};
10+
use opencv::imgproc::{circle, cvt_color_def, hough_circles, COLOR_BGR2GRAY, HOUGH_GRADIENT};
1111
use opencv::prelude::*;
1212
use opencv::Result;
1313

1414
opencv::not_opencv_branch_34! {
15-
use opencv::imgproc::LINE_8;
15+
use opencv::core::AlgorithmHint;
16+
use opencv::imgproc::LINE_8;
17+
use opencv::imgproc::gaussian_blur;
1618
}
1719
opencv::opencv_branch_34! {
18-
use opencv::core::LINE_8;
20+
use opencv::core::LINE_8;
21+
use opencv::imgproc::gaussian_blur;
1922
}
2023

2124
// Windows and trackbars names
@@ -89,15 +92,12 @@ fn main() -> Result<()> {
8992

9093
// Reduce the noise so we avoid false circle detection
9194
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-
)?;
95+
opencv::not_opencv_branch_34! {
96+
gaussian_blur(&src_gray, &mut src_gray_blur, Size2i::new(9, 9), 2.0, 2.0, BORDER_DEFAULT, AlgorithmHint::ALGO_HINT_DEFAULT)?;
97+
}
98+
opencv::opencv_branch_34! {
99+
gaussian_blur(&src_gray, &mut src_gray_blur, Size2i::new(9, 9), 2.0, 2.0, BORDER_DEFAULT)?;
100+
}
101101

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

examples/opencl.rs

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,51 @@
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;
1312
}
1413
opencv::opencv_branch_34! {
1514
use opencv::core::ACCESS_READ;
1615
}
16+
opencv_has_inherent_feature_opencl! {
17+
use opencv::core::Device;
18+
}
1719

1820
const ITERATIONS: usize = 100;
1921
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()?);
22+
#[allow(unused_mut, unused_assignments)]
23+
let mut opencl_have = false;
24+
opencv_has_inherent_feature_opencl! {
25+
opencl_have = opencv::core::have_opencl()?;
26+
}
27+
opencv_has_inherent_feature_opencl! {
28+
if opencl_have {
29+
opencv::core::set_use_opencl(true)?;
30+
let mut platforms = opencv::core::Vector::new();
31+
opencv::core::get_platfoms_info(&mut platforms)?;
32+
for (platf_num, platform) in platforms.into_iter().enumerate() {
33+
println!("Platform #{}: {}", platf_num, platform.name()?);
34+
for dev_num in 0..platform.device_number()? {
35+
let mut dev = Device::default();
36+
platform.get_device(&mut dev, dev_num)?;
37+
println!(" OpenCL device #{dev_num}: {}", dev.name()?);
38+
println!(" vendor: {}", dev.vendor_name()?);
39+
println!(" version: {}", dev.version()?);
40+
}
3341
}
3442
}
3543
}
36-
let opencl_use = core::use_opencl()?;
44+
#[allow(unused_mut, unused_assignments)]
45+
let mut opencl_use = false;
46+
opencv_has_inherent_feature_opencl! {
47+
opencl_use = opencv::core::use_opencl()?;
48+
}
3749
println!(
3850
"OpenCL is {} and {}",
3951
if opencl_have {
@@ -76,10 +88,3 @@ fn main() -> Result<()> {
7688
}
7789
Ok(())
7890
}
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)