#include <iostream>
int main(
int argc,
const char** argv )
{
"{ i | lena_tmpl.jpg |image name }"
"{ t | tmpl.png |template name }"
"{ m | mask.png |mask name }"
"{ cm| 3 |comparison method }");
cout << "This program demonstrates the use of template matching with mask." << endl
<< endl
<< "Available methods: https://docs.opencv.org/5.x/df/dfb/group__imgproc__object.html#ga3a7850640f1fe1f58fe91a2d7583695d" << endl
<< " TM_SQDIFF = " << (int)TM_SQDIFF << endl
<< " TM_SQDIFF_NORMED = " << (int)TM_SQDIFF_NORMED << endl
<< " TM_CCORR = " << (int)TM_CCORR << endl
<< " TM_CCORR_NORMED = " << (int)TM_CCORR_NORMED << endl
<< " TM_CCOEFF = " << (int)TM_CCOEFF << endl
<< " TM_CCOEFF_NORMED = " << (int)TM_CCOEFF_NORMED << endl
<< endl;
string filename = samples::findFile(parser.
get<
string>(
"i"));
string tmplname = samples::findFile(parser.
get<
string>(
"t"));
string maskname = samples::findFile(parser.
get<
string>(
"m"));
Mat img = imread(filename);
Mat tmpl = imread(tmplname);
Mat mask = imread(maskname);
{
cout << "can not open " << filename << endl;
return -1;
}
{
cout << "can not open " << tmplname << endl;
return -1;
}
if(mask.empty())
{
cout << "can not open " << maskname << endl;
return -1;
}
int method = parser.
get<
int>(
"cm");
matchTemplate(img, tmpl, res, method, mask);
double minVal, maxVal;
minMaxLoc(res, &minVal, &maxVal, &minLoc, &maxLoc);
if(method == TM_SQDIFF || method == TM_SQDIFF_NORMED)
else
rectangle(img, rect,
Scalar(0, 255, 0), 2);
imshow("detected template", img);
waitKey();
return 0;
}
Designed for command line parsing.
Definition utility.hpp:890
T get(const String &name, bool space_delete=true) const
Access arguments by name.
Definition utility.hpp:956
void printMessage() const
Print help message.
n-dimensional dense array class
Definition mat.hpp:951
MatSize size
Definition mat.hpp:2448
bool empty() const
Returns true if the array has no elements.
Template class for 2D rectangles.
Definition types.hpp:447
int main(int argc, char *argv[])
Definition highgui_qt.cpp:3