SurfFeatureDetector并使用Mat()创建一个空面具

时间:2012-03-28 06:41:40

标签: opencv feature-detection surf

我想使用SurfFeatureDetector来检测指定图片区域的关键点:

  1. Train_pic& Source_pic
  2. 使用SurfFeatureDetector检测Train_pic keypoint_1。
  3. 在指定区域使用SurfFeatureDetector检测Source_pic keypoint_2。
  4. 计算并匹配。
  5. OpenCV SurfFeatureDetector如下。

    void FeatureDetector::detect(const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat())

    mask - 指定查找关键点的位置的掩码(可选)。必须是感兴趣区域中具有非零值的char矩阵。

    任何人都可以帮助解释如何为Source_pic创建mask=Mat()

    由于 杰

1 个答案:

答案 0 :(得分:4)

从技术上讲,您不必指定空矩阵来使用detect函数,因为它是默认参数。

您可以像这样致电detect

Ptr<FeatureDetector> detector = FeatureDetector::create("SURF");
vector<KeyPoint> keyPoints;
detector->detect(anImage, keyPoints);

或者,通过显式创建空矩阵:

Ptr<FeatureDetector> detector = FeatureDetector::create("SURF");
vector<KeyPoint> keyPoints;
detector->detect(anImage, keyPoints, Mat());

如果要在感兴趣的区域中创建遮罩,可以创建一个这样的遮罩:

假设Source_pic的类型为CV_8UC3

Mat mask = Mat::zeros(Source_pic.size(), Source_pic.type());

// select a ROI
Mat roi(mask, Rect(10,10,100,100));

// fill the ROI with (255, 255, 255) (which is white in RGB space);
// the original image will be modified
roi = Scalar(255, 255, 255);

编辑:那里有副本面食错误。设置mask的投资回报率,然后将其传递给detect函数。

希望能够解决问题!