#include "opencv2/imgproc.hpp" #include "opencv2/highgui.hpp" #include using namespace std; using namespace cv; int main( int argc, const char** argv ) { CommandLineParser parser(argc, argv, "{ i | ../data/lena_tmpl.jpg |image name }" "{ t | ../data/tmpl.png |template name }" "{ m | ../data/mask.png |mask name }" "{ cm| 3 |comparison method }"); cout << "This program demonstrates the use of template matching with mask.\n\n"; parser.printMessage(); string filename = parser.get("i"); string tmplname = parser.get("t"); string maskname = parser.get("m"); Mat img = imread(filename); Mat tmpl = imread(tmplname); Mat mask = imread(maskname); Mat res; if(img.empty()) { cout << "can not open " << filename << endl; return -1; } if(tmpl.empty()) { cout << "can not open " << tmplname << endl; return -1; } if(mask.empty()) { cout << "can not open " << maskname << endl; return -1; } int method = parser.get("cm"); // default 3 (CV_TM_CCORR_NORMED) matchTemplate(img, tmpl, res, method, mask); double minVal, maxVal; Point minLoc, maxLoc; Rect rect; minMaxLoc(res, &minVal, &maxVal, &minLoc, &maxLoc); if(method == TM_SQDIFF || method == TM_SQDIFF_NORMED) rect = Rect(minLoc, tmpl.size()); else rect = Rect(maxLoc, tmpl.size()); rectangle(img, rect, Scalar(0, 255, 0), 2); imshow("detected template", img); waitKey(); return 0; }