diff --git a/modules/shape/include/opencv2/shape/shape_distance.hpp b/modules/shape/include/opencv2/shape/shape_distance.hpp index 725b56ac9..94e20bc33 100644 --- a/modules/shape/include/opencv2/shape/shape_distance.hpp +++ b/modules/shape/include/opencv2/shape/shape_distance.hpp @@ -53,7 +53,7 @@ namespace cv //! @addtogroup shape //! @{ -/** @example samples/cpp/shape_example.cpp +/** @example modules/shape/samples/shape_example.cpp An example using shape distance algorithm */ /** @brief Abstract base class for shape distance algorithms. diff --git a/modules/shape/samples/data/shape_sample/1.png b/modules/shape/samples/data/shape_sample/1.png new file mode 100644 index 000000000..f473cb4bd Binary files /dev/null and b/modules/shape/samples/data/shape_sample/1.png differ diff --git a/modules/shape/samples/data/shape_sample/10.png b/modules/shape/samples/data/shape_sample/10.png new file mode 100644 index 000000000..46283caac Binary files /dev/null and b/modules/shape/samples/data/shape_sample/10.png differ diff --git a/modules/shape/samples/data/shape_sample/11.png b/modules/shape/samples/data/shape_sample/11.png new file mode 100644 index 000000000..d4f114d80 Binary files /dev/null and b/modules/shape/samples/data/shape_sample/11.png differ diff --git a/modules/shape/samples/data/shape_sample/12.png b/modules/shape/samples/data/shape_sample/12.png new file mode 100644 index 000000000..ad876e939 Binary files /dev/null and b/modules/shape/samples/data/shape_sample/12.png differ diff --git a/modules/shape/samples/data/shape_sample/13.png b/modules/shape/samples/data/shape_sample/13.png new file mode 100644 index 000000000..2ec2621b2 Binary files /dev/null and b/modules/shape/samples/data/shape_sample/13.png differ diff --git a/modules/shape/samples/data/shape_sample/14.png b/modules/shape/samples/data/shape_sample/14.png new file mode 100644 index 000000000..956e5b814 Binary files /dev/null and b/modules/shape/samples/data/shape_sample/14.png differ diff --git a/modules/shape/samples/data/shape_sample/15.png b/modules/shape/samples/data/shape_sample/15.png new file mode 100644 index 000000000..422395fb0 Binary files /dev/null and b/modules/shape/samples/data/shape_sample/15.png differ diff --git a/modules/shape/samples/data/shape_sample/16.png b/modules/shape/samples/data/shape_sample/16.png new file mode 100644 index 000000000..57ad4104a Binary files /dev/null and b/modules/shape/samples/data/shape_sample/16.png differ diff --git a/modules/shape/samples/data/shape_sample/17.png b/modules/shape/samples/data/shape_sample/17.png new file mode 100644 index 000000000..58417bc57 Binary files /dev/null and b/modules/shape/samples/data/shape_sample/17.png differ diff --git a/modules/shape/samples/data/shape_sample/18.png b/modules/shape/samples/data/shape_sample/18.png new file mode 100644 index 000000000..25fb50b10 Binary files /dev/null and b/modules/shape/samples/data/shape_sample/18.png differ diff --git a/modules/shape/samples/data/shape_sample/19.png b/modules/shape/samples/data/shape_sample/19.png new file mode 100644 index 000000000..256b8889c Binary files /dev/null and b/modules/shape/samples/data/shape_sample/19.png differ diff --git a/modules/shape/samples/data/shape_sample/2.png b/modules/shape/samples/data/shape_sample/2.png new file mode 100644 index 000000000..7c7c31b94 Binary files /dev/null and b/modules/shape/samples/data/shape_sample/2.png differ diff --git a/modules/shape/samples/data/shape_sample/20.png b/modules/shape/samples/data/shape_sample/20.png new file mode 100644 index 000000000..de8d5ed3e Binary files /dev/null and b/modules/shape/samples/data/shape_sample/20.png differ diff --git a/modules/shape/samples/data/shape_sample/3.png b/modules/shape/samples/data/shape_sample/3.png new file mode 100644 index 000000000..7e8f7bc47 Binary files /dev/null and b/modules/shape/samples/data/shape_sample/3.png differ diff --git a/modules/shape/samples/data/shape_sample/4.png b/modules/shape/samples/data/shape_sample/4.png new file mode 100644 index 000000000..5cced92c7 Binary files /dev/null and b/modules/shape/samples/data/shape_sample/4.png differ diff --git a/modules/shape/samples/data/shape_sample/5.png b/modules/shape/samples/data/shape_sample/5.png new file mode 100644 index 000000000..786d658ca Binary files /dev/null and b/modules/shape/samples/data/shape_sample/5.png differ diff --git a/modules/shape/samples/data/shape_sample/6.png b/modules/shape/samples/data/shape_sample/6.png new file mode 100644 index 000000000..e87cf4d2c Binary files /dev/null and b/modules/shape/samples/data/shape_sample/6.png differ diff --git a/modules/shape/samples/data/shape_sample/7.png b/modules/shape/samples/data/shape_sample/7.png new file mode 100644 index 000000000..b12aa52d2 Binary files /dev/null and b/modules/shape/samples/data/shape_sample/7.png differ diff --git a/modules/shape/samples/data/shape_sample/8.png b/modules/shape/samples/data/shape_sample/8.png new file mode 100644 index 000000000..52fff13d4 Binary files /dev/null and b/modules/shape/samples/data/shape_sample/8.png differ diff --git a/modules/shape/samples/data/shape_sample/9.png b/modules/shape/samples/data/shape_sample/9.png new file mode 100644 index 000000000..a54aa3ab7 Binary files /dev/null and b/modules/shape/samples/data/shape_sample/9.png differ diff --git a/modules/shape/samples/shape_example.cpp b/modules/shape/samples/shape_example.cpp new file mode 100644 index 000000000..514e4dc01 --- /dev/null +++ b/modules/shape/samples/shape_example.cpp @@ -0,0 +1,121 @@ +/* + * shape_context.cpp -- Shape context demo for shape matching + */ + +#include "opencv2/shape.hpp" +#include "opencv2/imgcodecs.hpp" +#include "opencv2/highgui.hpp" +#include "opencv2/imgproc.hpp" +#include +#include +#include + +using namespace std; +using namespace cv; + +static void help() +{ + printf("\n" + "This program demonstrates a method for shape comparison based on Shape Context\n" + "You should run the program providing a number between 1 and 20 for selecting an image in the folder ../data/shape_sample.\n" + "Call\n" + "./shape_example [number between 1 and 20, 1 default]\n\n"); +} + +static vector simpleContour( const Mat& currentQuery, int n=300 ) +{ + vector > _contoursQuery; + vector contoursQuery; + findContours(currentQuery, _contoursQuery, RETR_LIST, CHAIN_APPROX_NONE); + for (size_t border=0; border<_contoursQuery.size(); border++) + { + for (size_t p=0; p<_contoursQuery[border].size(); p++) + { + contoursQuery.push_back( _contoursQuery[border][p] ); + } + } + + // In case actual number of points is less than n + int dummy=0; + for (int add=(int)contoursQuery.size()-1; add cont; + for (int i=0; i("@input"); + if (!parser.check()) + { + parser.printErrors(); + help(); + return 1; + } + if (indexQuery < 1 || indexQuery > 20) + { + help(); + return 1; + } + cv::Ptr mysc = cv::createShapeContextDistanceExtractor(); + + Size sz2Sh(300,300); + stringstream queryName; + queryName< contQuery = simpleContour(query); + int bestMatch = 0; + float bestDis=FLT_MAX; + for ( int ii=1; ii<=20; ii++ ) + { + if (ii==indexQuery) continue; + waitKey(30); + stringstream iiname; + iiname< contii = simpleContour(iiIm); + float dis = mysc->computeDistance( contQuery, contii ); + if ( dis