OpenCV中的函數參數中的mask的異同

所謂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用法搞混了,半天沒發現錯在哪兒…一看函數的定義才反應過來…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章