c++ - Iterate through cv::Points contained in a cv::Mat -


i using opencv template matching find image within image.

specifically matchtemplate() returns cv::mat containing similarity map of matches.

is there way sort through cv::points contained in cv::mat besides using minmaxloc()?

    minmaxloc(result, &minval, &maxval, &minloc, &maxloc); 

i have tried:

    cv::mat_<uchar>::iterator = result.begin<uchar>();     cv::mat_<uchar>::iterator end = result.end<uchar>();     (; != end; ++it)     {         cv::point test(it.pos());     } 

with limited success.

if understand correctly, wish sort pixels match score, , points corresponding these pixels in sorted order. can accomplish reshaping result single row, , calling cv::sortidx() indices of pixels in sorted order. then, can use indices offsets beginning of result position of particular pixel.

update: noticed 1 possible issue in code. looks assume result contains uchar data. cv::matchtemplate() requires result contain float data.

cv::mat_<int> indices; cv::sortidx(result.reshape(0,1), indices, cv_sort_descending + cv_sort_every_row);  cv::mat_<float>::const_iterator begin = result.begin<float>(); cv::mat_<int>::const_iterator = indices.begin(); cv::mat_<int>::const_iterator end = indices.end(); (; != end; ++it) {     cv::point pt = (begin + *it).pos();     // pt... } 

Comments

Popular posts from this blog

c++ - Creating new partition disk winapi -

Android Prevent Bluetooth Pairing Dialog -

VBA function to include CDATA -