Merge pull request #26405 from kaingwade:rename_features2d
Rename features2d #26405 This PR renames the module _features2d_ to _features_ as one of the Big OpenCV Cleanup #25007. Related PR: opencv/opencv_contrib: [#3820](https://github.com/opencv/opencv_contrib/pull/3820) opencv/ci-gha-workflow: [#192](https://github.com/opencv/ci-gha-workflow/pull/192)
@@ -44,26 +44,26 @@ You can find the images (*graf1.png*, *graf3.png*) and homography (*H1to3p.xml*)
|
||||
|
||||
@add_toggle_cpp
|
||||
- **Downloadable code**: Click
|
||||
[here](https://github.com/opencv/opencv/5.x/samples/cpp/tutorial_code/features2D/AKAZE_match.cpp)
|
||||
[here](https://github.com/opencv/opencv/5.x/samples/cpp/tutorial_code/features/AKAZE_match.cpp)
|
||||
|
||||
- **Code at glance:**
|
||||
@include samples/cpp/tutorial_code/features2D/AKAZE_match.cpp
|
||||
@include samples/cpp/tutorial_code/features/AKAZE_match.cpp
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
- **Downloadable code**: Click
|
||||
[here](https://github.com/opencv/opencv/5.x/samples/java/tutorial_code/features2D/akaze_matching/AKAZEMatchDemo.java)
|
||||
[here](https://github.com/opencv/opencv/5.x/samples/java/tutorial_code/features/akaze_matching/AKAZEMatchDemo.java)
|
||||
|
||||
- **Code at glance:**
|
||||
@include samples/java/tutorial_code/features2D/akaze_matching/AKAZEMatchDemo.java
|
||||
@include samples/java/tutorial_code/features/akaze_matching/AKAZEMatchDemo.java
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
- **Downloadable code**: Click
|
||||
[here](https://github.com/opencv/opencv/5.x/samples/python/tutorial_code/features2D/akaze_matching/AKAZE_match.py)
|
||||
[here](https://github.com/opencv/opencv/5.x/samples/python/tutorial_code/features/akaze_matching/AKAZE_match.py)
|
||||
|
||||
- **Code at glance:**
|
||||
@include samples/python/tutorial_code/features2D/akaze_matching/AKAZE_match.py
|
||||
@include samples/python/tutorial_code/features/akaze_matching/AKAZE_match.py
|
||||
@end_toggle
|
||||
|
||||
### Explanation
|
||||
@@ -71,15 +71,15 @@ You can find the images (*graf1.png*, *graf3.png*) and homography (*H1to3p.xml*)
|
||||
- **Load images and homography**
|
||||
|
||||
@add_toggle_cpp
|
||||
@snippet samples/cpp/tutorial_code/features2D/AKAZE_match.cpp load
|
||||
@snippet samples/cpp/tutorial_code/features/AKAZE_match.cpp load
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
@snippet samples/java/tutorial_code/features2D/akaze_matching/AKAZEMatchDemo.java load
|
||||
@snippet samples/java/tutorial_code/features/akaze_matching/AKAZEMatchDemo.java load
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
@snippet samples/python/tutorial_code/features2D/akaze_matching/AKAZE_match.py load
|
||||
@snippet samples/python/tutorial_code/features/akaze_matching/AKAZE_match.py load
|
||||
@end_toggle
|
||||
|
||||
We are loading grayscale images here. Homography is stored in the xml created with FileStorage.
|
||||
@@ -87,15 +87,15 @@ We are loading grayscale images here. Homography is stored in the xml created wi
|
||||
- **Detect keypoints and compute descriptors using AKAZE**
|
||||
|
||||
@add_toggle_cpp
|
||||
@snippet samples/cpp/tutorial_code/features2D/AKAZE_match.cpp AKAZE
|
||||
@snippet samples/cpp/tutorial_code/features/AKAZE_match.cpp AKAZE
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
@snippet samples/java/tutorial_code/features2D/akaze_matching/AKAZEMatchDemo.java AKAZE
|
||||
@snippet samples/java/tutorial_code/features/akaze_matching/AKAZEMatchDemo.java AKAZE
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
@snippet samples/python/tutorial_code/features2D/akaze_matching/AKAZE_match.py AKAZE
|
||||
@snippet samples/python/tutorial_code/features/akaze_matching/AKAZE_match.py AKAZE
|
||||
@end_toggle
|
||||
|
||||
We create AKAZE and detect and compute AKAZE keypoints and descriptors. Since we don't need the *mask*
|
||||
@@ -104,30 +104,30 @@ parameter, *noArray()* is used.
|
||||
- **Use brute-force matcher to find 2-nn matches**
|
||||
|
||||
@add_toggle_cpp
|
||||
@snippet samples/cpp/tutorial_code/features2D/AKAZE_match.cpp 2-nn matching
|
||||
@snippet samples/cpp/tutorial_code/features/AKAZE_match.cpp 2-nn matching
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
@snippet samples/java/tutorial_code/features2D/akaze_matching/AKAZEMatchDemo.java 2-nn matching
|
||||
@snippet samples/java/tutorial_code/features/akaze_matching/AKAZEMatchDemo.java 2-nn matching
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
@snippet samples/python/tutorial_code/features2D/akaze_matching/AKAZE_match.py 2-nn matching
|
||||
@snippet samples/python/tutorial_code/features/akaze_matching/AKAZE_match.py 2-nn matching
|
||||
@end_toggle
|
||||
|
||||
We use Hamming distance, because AKAZE uses binary descriptor by default.
|
||||
|
||||
- **Use 2-nn matches and ratio criterion to find correct keypoint matches**
|
||||
@add_toggle_cpp
|
||||
@snippet samples/cpp/tutorial_code/features2D/AKAZE_match.cpp ratio test filtering
|
||||
@snippet samples/cpp/tutorial_code/features/AKAZE_match.cpp ratio test filtering
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
@snippet samples/java/tutorial_code/features2D/akaze_matching/AKAZEMatchDemo.java ratio test filtering
|
||||
@snippet samples/java/tutorial_code/features/akaze_matching/AKAZEMatchDemo.java ratio test filtering
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
@snippet samples/python/tutorial_code/features2D/akaze_matching/AKAZE_match.py ratio test filtering
|
||||
@snippet samples/python/tutorial_code/features/akaze_matching/AKAZE_match.py ratio test filtering
|
||||
@end_toggle
|
||||
|
||||
If the closest match distance is significantly lower than the second closest one, then the match is correct (match is not ambiguous).
|
||||
@@ -135,15 +135,15 @@ If the closest match distance is significantly lower than the second closest one
|
||||
- **Check if our matches fit in the homography model**
|
||||
|
||||
@add_toggle_cpp
|
||||
@snippet samples/cpp/tutorial_code/features2D/AKAZE_match.cpp homography check
|
||||
@snippet samples/cpp/tutorial_code/features/AKAZE_match.cpp homography check
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
@snippet samples/java/tutorial_code/features2D/akaze_matching/AKAZEMatchDemo.java homography check
|
||||
@snippet samples/java/tutorial_code/features/akaze_matching/AKAZEMatchDemo.java homography check
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
@snippet samples/python/tutorial_code/features2D/akaze_matching/AKAZE_match.py homography check
|
||||
@snippet samples/python/tutorial_code/features/akaze_matching/AKAZE_match.py homography check
|
||||
@end_toggle
|
||||
|
||||
If the distance from first keypoint's projection to the second keypoint is less than threshold,
|
||||
@@ -154,15 +154,15 @@ We create a new set of matches for the inliers, because it is required by the dr
|
||||
- **Output results**
|
||||
|
||||
@add_toggle_cpp
|
||||
@snippet samples/cpp/tutorial_code/features2D/AKAZE_match.cpp draw final matches
|
||||
@snippet samples/cpp/tutorial_code/features/AKAZE_match.cpp draw final matches
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
@snippet samples/java/tutorial_code/features2D/akaze_matching/AKAZEMatchDemo.java draw final matches
|
||||
@snippet samples/java/tutorial_code/features/akaze_matching/AKAZEMatchDemo.java draw final matches
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
@snippet samples/python/tutorial_code/features2D/akaze_matching/AKAZE_match.py draw final matches
|
||||
@snippet samples/python/tutorial_code/features/akaze_matching/AKAZE_match.py draw final matches
|
||||
@end_toggle
|
||||
|
||||
Here we save the resulting image and print some statistics.
|
||||
|
Before Width: | Height: | Size: 2.0 MiB After Width: | Height: | Size: 2.0 MiB |
|
Before Width: | Height: | Size: 1.8 MiB After Width: | Height: | Size: 1.8 MiB |
@@ -48,7 +48,7 @@ To run the code you have to specify input (camera id or video_file). Then, selec
|
||||
Source Code
|
||||
-----------
|
||||
|
||||
@include cpp/tutorial_code/features2D/AKAZE_tracking/planar_tracking.cpp
|
||||
@include cpp/tutorial_code/features/AKAZE_tracking/planar_tracking.cpp
|
||||
|
||||
Explanation
|
||||
-----------
|
||||
|
Before Width: | Height: | Size: 318 KiB After Width: | Height: | Size: 318 KiB |
@@ -11,7 +11,7 @@ Detection of planar objects {#tutorial_detection_of_planar_objects}
|
||||
| Original author | Victor Eruhimov |
|
||||
| Compatibility | OpenCV >= 3.0 |
|
||||
|
||||
The goal of this tutorial is to learn how to use *features2d* and *calib3d* modules for detecting
|
||||
The goal of this tutorial is to learn how to use *features* and *calib3d* modules for detecting
|
||||
known planar objects in scenes.
|
||||
|
||||
*Test data*: use images in your data folder, for instance, box.png and box_in_scene.png.
|
||||
@@ -34,20 +34,20 @@ Code
|
||||
|
||||
@add_toggle_cpp
|
||||
This tutorial code's is shown lines below. You can also download it from
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/cpp/tutorial_code/features2D/feature_description/SURF_matching_Demo.cpp)
|
||||
@include samples/cpp/tutorial_code/features2D/feature_description/SURF_matching_Demo.cpp
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/cpp/tutorial_code/features/feature_description/SURF_matching_Demo.cpp)
|
||||
@include samples/cpp/tutorial_code/features/feature_description/SURF_matching_Demo.cpp
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
This tutorial code's is shown lines below. You can also download it from
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/java/tutorial_code/features2D/feature_description/SURFMatchingDemo.java)
|
||||
@include samples/java/tutorial_code/features2D/feature_description/SURFMatchingDemo.java
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/java/tutorial_code/features/feature_description/SURFMatchingDemo.java)
|
||||
@include samples/java/tutorial_code/features/feature_description/SURFMatchingDemo.java
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
This tutorial code's is shown lines below. You can also download it from
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/python/tutorial_code/features2D/feature_description/SURF_matching_Demo.py)
|
||||
@include samples/python/tutorial_code/features2D/feature_description/SURF_matching_Demo.py
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/python/tutorial_code/features/feature_description/SURF_matching_Demo.py)
|
||||
@include samples/python/tutorial_code/features/feature_description/SURF_matching_Demo.py
|
||||
@end_toggle
|
||||
|
||||
Explanation
|
||||
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 117 KiB |
@@ -32,20 +32,20 @@ Code
|
||||
|
||||
@add_toggle_cpp
|
||||
This tutorial code's is shown lines below. You can also download it from
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/cpp/tutorial_code/features2D/feature_detection/SURF_detection_Demo.cpp)
|
||||
@include samples/cpp/tutorial_code/features2D/feature_detection/SURF_detection_Demo.cpp
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/cpp/tutorial_code/features/feature_detection/SURF_detection_Demo.cpp)
|
||||
@include samples/cpp/tutorial_code/features/feature_detection/SURF_detection_Demo.cpp
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
This tutorial code's is shown lines below. You can also download it from
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/java/tutorial_code/features2D/feature_detection/SURFDetectionDemo.java)
|
||||
@include samples/java/tutorial_code/features2D/feature_detection/SURFDetectionDemo.java
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/java/tutorial_code/features/feature_detection/SURFDetectionDemo.java)
|
||||
@include samples/java/tutorial_code/features/feature_detection/SURFDetectionDemo.java
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
This tutorial code's is shown lines below. You can also download it from
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/python/tutorial_code/features2D/feature_detection/SURF_detection_Demo.py)
|
||||
@include samples/python/tutorial_code/features2D/feature_detection/SURF_detection_Demo.py
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/python/tutorial_code/features/feature_detection/SURF_detection_Demo.py)
|
||||
@include samples/python/tutorial_code/features/feature_detection/SURF_detection_Demo.py
|
||||
@end_toggle
|
||||
|
||||
Explanation
|
||||
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
@@ -55,20 +55,20 @@ Code
|
||||
|
||||
@add_toggle_cpp
|
||||
This tutorial code's is shown lines below. You can also download it from
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/cpp/tutorial_code/features2D/feature_flann_matcher/SURF_FLANN_matching_Demo.cpp)
|
||||
@include samples/cpp/tutorial_code/features2D/feature_flann_matcher/SURF_FLANN_matching_Demo.cpp
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/cpp/tutorial_code/features/feature_flann_matcher/SURF_FLANN_matching_Demo.cpp)
|
||||
@include samples/cpp/tutorial_code/features/feature_flann_matcher/SURF_FLANN_matching_Demo.cpp
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
This tutorial code's is shown lines below. You can also download it from
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/java/tutorial_code/features2D/feature_flann_matcher/SURFFLANNMatchingDemo.java)
|
||||
@include samples/java/tutorial_code/features2D/feature_flann_matcher/SURFFLANNMatchingDemo.java
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/java/tutorial_code/features/feature_flann_matcher/SURFFLANNMatchingDemo.java)
|
||||
@include samples/java/tutorial_code/features/feature_flann_matcher/SURFFLANNMatchingDemo.java
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
This tutorial code's is shown lines below. You can also download it from
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/python/tutorial_code/features2D/feature_flann_matcher/SURF_FLANN_matching_Demo.py)
|
||||
@include samples/python/tutorial_code/features2D/feature_flann_matcher/SURF_FLANN_matching_Demo.py
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/python/tutorial_code/features/feature_flann_matcher/SURF_FLANN_matching_Demo.py)
|
||||
@include samples/python/tutorial_code/features/feature_flann_matcher/SURF_FLANN_matching_Demo.py
|
||||
@end_toggle
|
||||
|
||||
Explanation
|
||||
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
@@ -1,4 +1,4 @@
|
||||
Features2D + Homography to find a known object {#tutorial_feature_homography}
|
||||
Features + Homography to find a known object {#tutorial_feature_homography}
|
||||
==============================================
|
||||
|
||||
@tableofcontents
|
||||
@@ -30,20 +30,20 @@ Code
|
||||
|
||||
@add_toggle_cpp
|
||||
This tutorial code's is shown lines below. You can also download it from
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/cpp/tutorial_code/features2D/feature_homography/SURF_FLANN_matching_homography_Demo.cpp)
|
||||
@include samples/cpp/tutorial_code/features2D/feature_homography/SURF_FLANN_matching_homography_Demo.cpp
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/cpp/tutorial_code/features/feature_homography/SURF_FLANN_matching_homography_Demo.cpp)
|
||||
@include samples/cpp/tutorial_code/features/feature_homography/SURF_FLANN_matching_homography_Demo.cpp
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
This tutorial code's is shown lines below. You can also download it from
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/java/tutorial_code/features2D/feature_homography/SURFFLANNMatchingHomographyDemo.java)
|
||||
@include samples/java/tutorial_code/features2D/feature_homography/SURFFLANNMatchingHomographyDemo.java
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/java/tutorial_code/features/feature_homography/SURFFLANNMatchingHomographyDemo.java)
|
||||
@include samples/java/tutorial_code/features/feature_homography/SURFFLANNMatchingHomographyDemo.java
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
This tutorial code's is shown lines below. You can also download it from
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/python/tutorial_code/features2D/feature_homography/SURF_FLANN_matching_homography_Demo.py)
|
||||
@include samples/python/tutorial_code/features2D/feature_homography/SURF_FLANN_matching_homography_Demo.py
|
||||
[here](https://github.com/opencv/opencv/tree/5.x/samples/python/tutorial_code/features/feature_homography/SURF_FLANN_matching_homography_Demo.py)
|
||||
@include samples/python/tutorial_code/features/feature_homography/SURF_FLANN_matching_homography_Demo.py
|
||||
@end_toggle
|
||||
|
||||
Explanation
|
||||
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 88 KiB |
@@ -22,9 +22,9 @@ For detailed explanations about the theory, please refer to a computer vision co
|
||||
* Deeper understanding of the homography decomposition for vision-based control, Ezio Malis, Manuel Vargas, @cite Malis2007 (open access [here](https://hal.inria.fr/inria-00174036))
|
||||
* Pose Estimation for Augmented Reality: A Hands-On Survey, Eric Marchand, Hideaki Uchiyama, Fabien Spindler, @cite Marchand16 (open access [here](https://hal.inria.fr/hal-01246370))
|
||||
|
||||
The tutorial code can be found here [C++](https://github.com/opencv/opencv/tree/5.x/samples/cpp/tutorial_code/features2D/Homography),
|
||||
[Python](https://github.com/opencv/opencv/tree/5.x/samples/python/tutorial_code/features2D/Homography),
|
||||
[Java](https://github.com/opencv/opencv/tree/5.x/samples/java/tutorial_code/features2D/Homography).
|
||||
The tutorial code can be found here [C++](https://github.com/opencv/opencv/tree/5.x/samples/cpp/tutorial_code/features/Homography),
|
||||
[Python](https://github.com/opencv/opencv/tree/5.x/samples/python/tutorial_code/features/Homography),
|
||||
[Java](https://github.com/opencv/opencv/tree/5.x/samples/java/tutorial_code/features/Homography).
|
||||
The images used in this tutorial can be found [here](https://github.com/opencv/opencv/tree/5.x/samples/data) (`left*.jpg`).
|
||||
|
||||
Basic theory {#tutorial_homography_Basic_theory}
|
||||
@@ -188,11 +188,11 @@ The first step consists to detect the chessboard corners in the source and desir
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
@snippet samples/python/tutorial_code/features2D/Homography/perspective_correction.py find-corners
|
||||
@snippet samples/python/tutorial_code/features/Homography/perspective_correction.py find-corners
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
@snippet samples/java/tutorial_code/features2D/Homography/PerspectiveCorrection.java find-corners
|
||||
@snippet samples/java/tutorial_code/features/Homography/PerspectiveCorrection.java find-corners
|
||||
@end_toggle
|
||||
|
||||
The homography is estimated easily with:
|
||||
@@ -202,11 +202,11 @@ The homography is estimated easily with:
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
@snippet samples/python/tutorial_code/features2D/Homography/perspective_correction.py estimate-homography
|
||||
@snippet samples/python/tutorial_code/features/Homography/perspective_correction.py estimate-homography
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
@snippet samples/java/tutorial_code/features2D/Homography/PerspectiveCorrection.java estimate-homography
|
||||
@snippet samples/java/tutorial_code/features/Homography/PerspectiveCorrection.java estimate-homography
|
||||
@end_toggle
|
||||
|
||||
To warp the source chessboard view into the desired chessboard view, we use @ref cv::warpPerspective
|
||||
@@ -216,11 +216,11 @@ To warp the source chessboard view into the desired chessboard view, we use @ref
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
@snippet samples/python/tutorial_code/features2D/Homography/perspective_correction.py warp-chessboard
|
||||
@snippet samples/python/tutorial_code/features/Homography/perspective_correction.py warp-chessboard
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
@snippet samples/java/tutorial_code/features2D/Homography/PerspectiveCorrection.java warp-chessboard
|
||||
@snippet samples/java/tutorial_code/features/Homography/PerspectiveCorrection.java warp-chessboard
|
||||
@end_toggle
|
||||
|
||||
The result image is:
|
||||
@@ -234,11 +234,11 @@ To compute the coordinates of the source corners transformed by the homography:
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
@snippet samples/python/tutorial_code/features2D/Homography/perspective_correction.py compute-transformed-corners
|
||||
@snippet samples/python/tutorial_code/features/Homography/perspective_correction.py compute-transformed-corners
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
@snippet samples/java/tutorial_code/features2D/Homography/PerspectiveCorrection.java compute-transformed-corners
|
||||
@snippet samples/java/tutorial_code/features/Homography/PerspectiveCorrection.java compute-transformed-corners
|
||||
@end_toggle
|
||||
|
||||
To check the correctness of the calculation, the matching lines are displayed:
|
||||
@@ -564,11 +564,11 @@ With the known associated camera poses and the intrinsic parameters, the relativ
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
@snippet samples/python/tutorial_code/features2D/Homography/panorama_stitching_rotating_camera.py extract-rotation
|
||||
@snippet samples/python/tutorial_code/features/Homography/panorama_stitching_rotating_camera.py extract-rotation
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
@snippet samples/java/tutorial_code/features2D/Homography/PanoramaStitchingRotatingCamera.java extract-rotation
|
||||
@snippet samples/java/tutorial_code/features/Homography/PanoramaStitchingRotatingCamera.java extract-rotation
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_cpp
|
||||
@@ -576,11 +576,11 @@ With the known associated camera poses and the intrinsic parameters, the relativ
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
@snippet samples/python/tutorial_code/features2D/Homography/panorama_stitching_rotating_camera.py compute-rotation-displacement
|
||||
@snippet samples/python/tutorial_code/features/Homography/panorama_stitching_rotating_camera.py compute-rotation-displacement
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
@snippet samples/java/tutorial_code/features2D/Homography/PanoramaStitchingRotatingCamera.java compute-rotation-displacement
|
||||
@snippet samples/java/tutorial_code/features/Homography/PanoramaStitchingRotatingCamera.java compute-rotation-displacement
|
||||
@end_toggle
|
||||
|
||||
Here, the second image will be stitched with respect to the first image. The homography can be calculated using the formula above:
|
||||
@@ -590,11 +590,11 @@ Here, the second image will be stitched with respect to the first image. The hom
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
@snippet samples/python/tutorial_code/features2D/Homography/panorama_stitching_rotating_camera.py compute-homography
|
||||
@snippet samples/python/tutorial_code/features/Homography/panorama_stitching_rotating_camera.py compute-homography
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
@snippet samples/java/tutorial_code/features2D/Homography/PanoramaStitchingRotatingCamera.java compute-homography
|
||||
@snippet samples/java/tutorial_code/features/Homography/PanoramaStitchingRotatingCamera.java compute-homography
|
||||
@end_toggle
|
||||
|
||||
The stitching is made simply with:
|
||||
@@ -604,11 +604,11 @@ The stitching is made simply with:
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_python
|
||||
@snippet samples/python/tutorial_code/features2D/Homography/panorama_stitching_rotating_camera.py stitch
|
||||
@snippet samples/python/tutorial_code/features/Homography/panorama_stitching_rotating_camera.py stitch
|
||||
@end_toggle
|
||||
|
||||
@add_toggle_java
|
||||
@snippet samples/java/tutorial_code/features2D/Homography/PanoramaStitchingRotatingCamera.java stitch
|
||||
@snippet samples/java/tutorial_code/features/Homography/PanoramaStitchingRotatingCamera.java stitch
|
||||
@end_toggle
|
||||
|
||||
The resulting image is:
|
||||
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.8 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
@@ -1,4 +1,4 @@
|
||||
2D Features framework (feature2d module) {#tutorial_table_of_content_features2d}
|
||||
Features framework (features module) {#tutorial_table_of_content_features}
|
||||
=========================================
|
||||
|
||||
- @subpage tutorial_harris_detector
|
||||
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
@@ -151,7 +151,7 @@ cmake -DBUILD_LIST=calib3d,videoio,ts ../opencv
|
||||
In this example we requested 3 modules and configuration script has determined all dependencies automatically:
|
||||
```
|
||||
-- OpenCV modules:
|
||||
-- To be built: calib3d core features2d flann highgui imgcodecs imgproc ts videoio
|
||||
-- To be built: calib3d core features flann highgui imgcodecs imgproc ts videoio
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -111,7 +111,7 @@ Making a project
|
||||
on the list below are enough (for simple applications) . In my case, I am putting all of them
|
||||
since I plan to use the whole bunch:
|
||||
|
||||
opencv_core opencv_imgproc opencv_imgcodecs opencv_highgui opencv_ml opencv_videoio opencv_video opencv_features2d
|
||||
opencv_core opencv_imgproc opencv_imgcodecs opencv_highgui opencv_videoio opencv_video opencv_features
|
||||
opencv_3d opencv_objdetect opencv_flann
|
||||
|
||||

|
||||
@@ -123,7 +123,7 @@ Making a project
|
||||
@endcode
|
||||
My output (in case you want to check) was:
|
||||
@code{.bash}
|
||||
-L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_videoio -lopencv_imgcodecs -lopencv_flann
|
||||
-L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_video -lopencv_features -lopencv_3d -lopencv_calib -lopencv_stereo -lopencv_objdetect -lopencv_videoio -lopencv_imgcodecs -lopencv_flann
|
||||
@endcode
|
||||
Now you are done. Click **OK**
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ OpenCV Tutorials {#tutorial_root}
|
||||
- @subpage tutorial_table_of_content_app - application utils (GUI, image/video input/output)
|
||||
- @subpage tutorial_table_of_content_calib3d - extract 3D world information from 2D images
|
||||
- @subpage tutorial_table_of_content_objdetect - INSERT OBJDETECT MODULE INFO
|
||||
- @subpage tutorial_table_of_content_features2d - feature detectors, descriptors and matching framework
|
||||
- @subpage tutorial_table_of_content_features - feature detectors, descriptors and matching framework
|
||||
- @subpage tutorial_table_of_content_dnn - infer neural networks using built-in _dnn_ module
|
||||
- @subpage tutorial_table_of_content_gapi - graph-based approach to computer vision algorithms building
|
||||
- @subpage tutorial_table_of_content_other - other modules (stitching, video, photo)
|
||||
|
||||