What do the values of the mask parameter returned by findHomography represent?

The mask returned by findHomography is an 8-bit, single-channel cv::Mat (or std::vector<uchar>, if you prefer) containing either 0 or 1 indicating the outlier status.

EDIT: You access each element of the mask by calling .at<double>, which is leading to the confusing output. You should be using .at<uchar>, which will interpret the matrix value correctly.


I used the findHomography method after applying keypoint matching.

  • Inliers are matched keypoints that are calculated to be true positives (correct matches);
  • Outliers are matched keypoints that are calculated to be false positives (false matches).

Then you can use the mask output to extract the subset of correct matches from all matches.

  • There is an example in Python 3.6 & OpenCV 3.4.1:

    good_kp = [gray_kp[m.queryIdx].pt for m in good_matches]
    correct_matched_kp = [good_kp[i] for i in range(len(good_kp)) if mask[i]]