From 627b44102281d01bd96b501e078d657f836c4ebc Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Wed, 30 Jan 2013 13:05:57 +0400 Subject: [PATCH] Bugfix #2532 patch 4 corner detection sample possible bug solved. Tutorial text was not consistent with tutorial source code in samples directory. Inline source code was replaced on "includeliteral" directive with link to cpp file. --- .../generic_corner_detector.rst | 123 +----------------- 1 file changed, 2 insertions(+), 121 deletions(-) diff --git a/doc/tutorials/features2d/trackingmotion/generic_corner_detector/generic_corner_detector.rst b/doc/tutorials/features2d/trackingmotion/generic_corner_detector/generic_corner_detector.rst index 5dabe60048..465ff216cb 100644 --- a/doc/tutorials/features2d/trackingmotion/generic_corner_detector/generic_corner_detector.rst +++ b/doc/tutorials/features2d/trackingmotion/generic_corner_detector/generic_corner_detector.rst @@ -22,127 +22,8 @@ Code This tutorial code's is shown lines below. You can also download it from `here `_ -.. code-block:: cpp - - #include "opencv2/highgui/highgui.hpp" - #include "opencv2/imgproc/imgproc.hpp" - #include - #include - #include - - using namespace cv; - using namespace std; - - /// Global variables - Mat src, src_gray; - Mat myHarris_dst; Mat myHarris_copy; Mat Mc; - Mat myShiTomasi_dst; Mat myShiTomasi_copy; - - int myShiTomasi_qualityLevel = 50; - int myHarris_qualityLevel = 50; - int max_qualityLevel = 100; - - double myHarris_minVal; double myHarris_maxVal; - double myShiTomasi_minVal; double myShiTomasi_maxVal; - - RNG rng(12345); - - char* myHarris_window = "My Harris corner detector"; - char* myShiTomasi_window = "My Shi Tomasi corner detector"; - - /// Function headers - void myShiTomasi_function( int, void* ); - void myHarris_function( int, void* ); - - /** @function main */ - int main( int argc, char** argv ) - { - /// Load source image and convert it to gray - src = imread( argv[1], 1 ); - cvtColor( src, src_gray, CV_BGR2GRAY ); - - /// Set some parameters - int blockSize = 3; int apertureSize = 3; - - /// My Harris matrix -- Using cornerEigenValsAndVecs - myHarris_dst = Mat::zeros( src_gray.size(), CV_32FC(6) ); - Mc = Mat::zeros( src_gray.size(), CV_32FC1 ); - - cornerEigenValsAndVecs( src_gray, myHarris_dst, blockSize, apertureSize, BORDER_DEFAULT ); - - /* calculate Mc */ - for( int j = 0; j < src_gray.rows; j++ ) - { for( int i = 0; i < src_gray.cols; i++ ) - { - float lambda_1 = myHarris_dst.at( j, i, 0 ); - float lambda_2 = myHarris_dst.at( j, i, 1 ); - Mc.at(j,i) = lambda_1*lambda_2 - 0.04*pow( ( lambda_1 + lambda_2 ), 2 ); - } - } - - minMaxLoc( Mc, &myHarris_minVal, &myHarris_maxVal, 0, 0, Mat() ); - - /* Create Window and Trackbar */ - namedWindow( myHarris_window, CV_WINDOW_AUTOSIZE ); - createTrackbar( " Quality Level:", myHarris_window, &myHarris_qualityLevel, max_qualityLevel, - myHarris_function ); - myHarris_function( 0, 0 ); - - /// My Shi-Tomasi -- Using cornerMinEigenVal - myShiTomasi_dst = Mat::zeros( src_gray.size(), CV_32FC1 ); - cornerMinEigenVal( src_gray, myShiTomasi_dst, blockSize, apertureSize, BORDER_DEFAULT ); - - minMaxLoc( myShiTomasi_dst, &myShiTomasi_minVal, &myShiTomasi_maxVal, 0, 0, Mat() ); - - /* Create Window and Trackbar */ - namedWindow( myShiTomasi_window, CV_WINDOW_AUTOSIZE ); - createTrackbar( " Quality Level:", myShiTomasi_window, &myShiTomasi_qualityLevel, max_qualityLevel, - myShiTomasi_function ); - myShiTomasi_function( 0, 0 ); - - waitKey(0); - return(0); - } - - /** @function myShiTomasi_function */ - void myShiTomasi_function( int, void* ) - { - myShiTomasi_copy = src.clone(); - - if( myShiTomasi_qualityLevel < 1 ) { myShiTomasi_qualityLevel = 1; } - - for( int j = 0; j < src_gray.rows; j++ ) - { for( int i = 0; i < src_gray.cols; i++ ) - { - if( myShiTomasi_dst.at(j,i) > myShiTomasi_minVal + ( myShiTomasi_maxVal - - myShiTomasi_minVal )*myShiTomasi_qualityLevel/max_qualityLevel ) - { circle( myShiTomasi_copy, Point(i,j), 4, Scalar( rng.uniform(0,255), - rng.uniform(0,255), rng.uniform(0,255) ), -1, 8, 0 ); } - } - } - imshow( myShiTomasi_window, myShiTomasi_copy ); - } - - /** @function myHarris_function */ - void myHarris_function( int, void* ) - { - myHarris_copy = src.clone(); - - if( myHarris_qualityLevel < 1 ) { myHarris_qualityLevel = 1; } - - for( int j = 0; j < src_gray.rows; j++ ) - { for( int i = 0; i < src_gray.cols; i++ ) - { - if( Mc.at(j,i) > myHarris_minVal + ( myHarris_maxVal - myHarris_minVal ) - *myHarris_qualityLevel/max_qualityLevel ) - { circle( myHarris_copy, Point(i,j), 4, Scalar( rng.uniform(0,255), rng.uniform(0,255), - rng.uniform(0,255) ), -1, 8, 0 ); } - } - } - imshow( myHarris_window, myHarris_copy ); - } - - +.. literalinclude:: ../../../../../samples/cpp/tutorial_code/TrackingMotion/cornerDetector_Demo.cpp + :language: cpp Explanation ============