#include #include "opencv2/core/utility.hpp" #include "opencv2/core/private.hpp" #include #include #include #include #include using namespace cv; static const std::string images[] = { "cameraman.jpg", "church.jpg", "church2.png", "einstein.jpg", "stuff.jpg" }; static const char* keys = { "{@image_path | | Image path }" }; static void help() { std::cout << "\nThis example shows the functionalities of radius matching " << "Please, run this sample using a command in the form\n" << "./example_line_descriptor_radius_matching /" << std::endl; } int main( int argc, char** argv ) { /* get parameters from comand line */ CommandLineParser parser( argc, argv, keys ); String pathToImages = parser.get( 0 ); /* create structures for hosting KeyLines and descriptors */ int num_elements = sizeof( images ) / sizeof( images[0] ); std::vector descriptorsMat; std::vector > linesMat; /*create a pointer to a BinaryDescriptor object */ Ptr bd = BinaryDescriptor::createBinaryDescriptor(); /* compute lines and descriptors */ for(int i = 0; i lines; Mat computedDescr; bd->detect(loadedImage, lines); bd->compute(loadedImage, lines, computedDescr); descriptorsMat.push_back(computedDescr); linesMat.push_back(lines); } /* compose a queries matrix */ Mat queries; for(size_t j = 0; j= 5) queries.push_back(descriptorsMat[j].rowRange(0, 5)); else if(descriptorsMat[j].rows >0 && descriptorsMat[j].rows<5) queries.push_back(descriptorsMat[j]); } std::cout << "It has been generated a matrix of " << queries.rows << " descriptors" << std::endl; /* create a BinaryDescriptorMatcher object */ Ptr bdm = BinaryDescriptorMatcher::createBinaryDescriptorMatcher(); /* populate matcher */ bdm->add(descriptorsMat); /* compute matches */ std::vector > matches; bdm->radiusMatch(queries, matches, 30); /* print matches */ for(size_t q = 0; q