Maxvalue in cv2.minMaxLoc()?

Viewed 12620

I'm having a bit of trouble with opencv and template matching, so I was hoping someone here could help a lost soul out.

So as part of the code I'm using, I've got the following 2 lines which I don't quite understand as well as I should.

result = cv2.matchTemplate(edged, template, cv2.TM_CCOEFF)
(_, maxVal, _, maxLoc) = cv2.minMaxLoc(result)

From my understanding, the first line stores a correlation coefficient in the variable "result". This in turn is passed into cv2.minMaxLoc(...) which in turn generates a 4 element array composing of (minVal, maxVal, minLoc, maxLoc) of which we are only interested in maxVal and maxLoc.

Upon printing the value of maxVal, I seem to be getting values in the between 2,000,000 to 7,000,000 depending on the template, lighting conditions etc.

My questions are as follows:

What does maxVal mean?

What is the range of maxVal?

What physical characteristics affect the values of maxVal?

Thank you in advance for all your help and guidance!

3 Answers

As the other answers already explain, you are matching based on cross-correlation. So maxVal is the maximum of your cross-correlation. It is difficult to make a generic guess about the range. But you can always limit the range to [0, 1] by

normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat());

If you crop the region of the image that best matches the template, then the value of the peak of the cross-correlation function is

np.sum(cropped * template)

This value will get bigger when the image is brighter, when the template is brighter, and when the template is bigger.

Related