@@ -20,3 +20,42 @@ fn orb() -> Result<()> {
20
20
assert_eq ! ( Size :: new( 32 , size as i32 ) , des. size( ) ?) ;
21
21
Ok ( ( ) )
22
22
}
23
+
24
+
25
+ /// cargo test --package opencv --test features2d -- orb_bruteforce_match --exact --nocapture
26
+ #[ test]
27
+ fn orb_bruteforce_match ( ) -> Result < ( ) > {
28
+ let blox_path = PathBuf :: from ( env ! ( "CARGO_MANIFEST_DIR" ) ) . join ( "tests/blox.jpg" ) ;
29
+ let img_a = imgcodecs:: imread ( blox_path. to_str ( ) . unwrap ( ) , imgcodecs:: IMREAD_GRAYSCALE ) ?;
30
+ let img_b = img_a. clone ( ) ; // yep this is the same
31
+
32
+ let mut orb = features2d:: ORB :: default ( ) ?;
33
+ let mut kp_a = VectorOfKeyPoint :: new ( ) ;
34
+ let mut des_a = Mat :: default ( ) ;
35
+ orb. detect_and_compute ( & img_a, & Mat :: default ( ) , & mut kp_a, & mut des_a, false ) ?;
36
+
37
+ let mut kp_b = VectorOfKeyPoint :: new ( ) ;
38
+ let mut des_b = Mat :: default ( ) ;
39
+ orb. detect_and_compute ( & img_b, & Mat :: default ( ) , & mut kp_b, & mut des_b, false ) ?;
40
+
41
+
42
+ let size = 290 ;
43
+ assert_eq ! ( size, kp_a. len( ) ) ;
44
+ assert_eq ! ( Size :: new( 32 , size as i32 ) , des_a. size( ) ?) ;
45
+ assert_eq ! ( size, kp_b. len( ) ) ;
46
+ assert_eq ! ( Size :: new( 32 , size as i32 ) , des_b. size( ) ?) ;
47
+
48
+ let mut bf_matcher = features2d:: BFMatcher :: create ( NORM_HAMMING , true ) . unwrap ( ) ;
49
+
50
+ // Match descriptors
51
+ let mut query_descriptors: Vector < Mat > = Vector :: new ( ) ;
52
+ query_descriptors. push ( des_a) ;
53
+ query_descriptors. push ( des_b) ;
54
+
55
+ let mut matches = opencv:: types:: VectorOfDMatch :: new ( ) ;
56
+ bf_matcher. match_ ( & query_descriptors, & mut matches, & no_array ( ) ) . unwrap ( ) ;
57
+
58
+ assert_ne ! ( matches. len( ) , 0 ) ; // expected many matches since images are equal
59
+ println ! ( "Match {:?}" , matches) ;
60
+ Ok ( ( ) )
61
+ }
0 commit comments