所謂mask,就是我們常常說到的掩膜,在opencv中,利用掩膜,我們可以完成對圖像ROI的局部操作;可以對圖像進行濾波;可以在進行特徵匹配的繪製時僅選取匹配較好的點進行繪製。總之,掩膜的很大一種用途是對Mat的元素進行精確的部分選中操作。
然而,在不同的函數中mask的數據類型不同,現舉兩個例子:
1.drawMatches中的mask
void drawMatches( InputArray img1, const std::vector<KeyPoint>& keypoints1,
InputArray img2, const std::vector<KeyPoint>& keypoints2,
const std::vector<DMatch>& matches1to2, InputOutputArray outImg,
const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1),
const std::vector<char>& matchesMask=std::vector<char>(), int flags=DrawMatchesFlags::DEFAULT );
該函數用於繪製特徵匹配結果,他的mask的類型是
vector<char>
因此我們這樣初始化mask:
vector<char> mask;
2.findFundamentalMat、findHomography中的mask
cv::Mat cv::findFundamentalMat( InputArray _points1, InputArray _points2,
OutputArray _mask, int method, double param1, double param2 )
可見,mask是一個OutputArray類型的變量,應爲一個1×n或n×1的Mat變量。
之前在編程時把兩個函數的mask用法搞混了,半天沒發現錯在哪兒…一看函數的定義才反應過來…