From 5102116c52e39941c47cf87391c8de28875405e9 Mon Sep 17 00:00:00 2001 From: Salman Date: Tue, 15 Mar 2016 10:53:41 +0500 Subject: [PATCH] updated matchTemplate and added example --- examples/files/car1_template.jpg | Bin 0 -> 22936 bytes src/Matrix.cc | 40 +++++++++++++++++++++++++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 examples/files/car1_template.jpg diff --git a/examples/files/car1_template.jpg b/examples/files/car1_template.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4fdf1c91325fe94c1c2bb3f2188dc4adad8c3bc GIT binary patch literal 22936 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 QV0TaZ=87n&yDrH8*~tRT@c;k- literal 0 HcmV?d00001 diff --git a/src/Matrix.cc b/src/Matrix.cc index 5985a6db..e0df89ca 100755 --- a/src/Matrix.cc +++ b/src/Matrix.cc @@ -2249,7 +2249,7 @@ NAN_METHOD(Matrix::MatchTemplate) { v8::String::Utf8Value args0(info[0]->ToString()); std::string filename = std::string(*args0); cv::Mat templ; - templ = cv::imread(filename, CV_8S); + templ = cv::imread(filename, -1); Local out = Nan::New(Matrix::constructor)->GetFunction()->NewInstance(); Matrix *m_out = Nan::ObjectWrap::Unwrap(out); @@ -2268,8 +2268,44 @@ NAN_METHOD(Matrix::MatchTemplate) { int method = (info.Length() < 2) ? (int)cv::TM_CCORR_NORMED : info[1]->Uint32Value(); cv::matchTemplate(self->mat, templ, m_out->mat, method); + cv::normalize(m_out->mat, m_out->mat, 0, 1, cv::NORM_MINMAX, -1, cv::Mat()); + double minVal; + double maxVal; + cv::Point minLoc; + cv::Point maxLoc; + cv::Point matchLoc; - info.GetReturnValue().Set(out); + minMaxLoc(m_out->mat, &minVal, &maxVal, &minLoc, &maxLoc, cv::Mat()); + + if(method == CV_TM_SQDIFF || method == CV_TM_SQDIFF_NORMED) { + matchLoc = minLoc; + } + else { + matchLoc = maxLoc; + } + + //detected ROI + unsigned int roi_x = matchLoc.x; + unsigned int roi_y = matchLoc.y; + unsigned int roi_width = templ.cols; + unsigned int roi_height = templ.rows; + + //draw rectangle + if(info.Length() >= 3) { + cv::Rect roi(roi_x,roi_y,roi_width,roi_height); + cv::rectangle(self->mat, roi, cv::Scalar(0,0,255)); + } + + m_out->mat.convertTo(m_out->mat, CV_8UC1, 255, 0); + + v8::Local arr = Nan::New(5); + arr->Set(0, out); + arr->Set(1, Nan::New(roi_x)); + arr->Set(2, Nan::New(roi_y)); + arr->Set(3, Nan::New(roi_width)); + arr->Set(4, Nan::New(roi_height)); + + info.GetReturnValue().Set(arr); } // @author ytham