Opencv SurfFeatureDetector并使用Mat()创建空遮罩

Opencv SurfFeatureDetector并使用Mat()创建空遮罩,opencv,feature-detection,surf,Opencv,Feature Detection,Surf,我想使用SurfFeatureDetector检测图片指定区域上的关键点: 列车图片和来源图片 使用SurfFeatureDetector检测列车pic关键点1 使用指定区域中的SurfFeatureDetector检测源图像关键点2 计算并匹配 OpenCVSurfFeatureDetector如下所示 void FeatureDetector::detect(常数矩阵和图像、向量和关键点、常数矩阵和掩码=Mat()) 掩码–指定在何处查找关键点的掩码(可选)。必须是兴趣区域中具有非零值的字符

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

  • 列车图片和来源图片
  • 使用
    SurfFeatureDetector
    检测列车pic关键点1
  • 使用指定区域中的
    SurfFeatureDetector
    检测源图像关键点2
  • 计算并匹配
  • OpenCV
    SurfFeatureDetector
    如下所示

    void FeatureDetector::detect(常数矩阵和图像、向量和关键点、常数矩阵和掩码=Mat())

    掩码–指定在何处查找关键点的掩码(可选)。必须是兴趣区域中具有非零值的字符矩阵

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

    谢谢
    Jay

    从技术上讲,您不必指定空矩阵来使用
    检测功能,因为它是默认参数

    您可以这样调用
    detect

    Ptr<FeatureDetector> detector = FeatureDetector::create("SURF");
    vector<KeyPoint> keyPoints;
    detector->detect(anImage, keyPoints);
    
    编辑:中有一个复制错误。设置
    遮罩的ROI
    ,然后将其传递给
    检测功能


    希望能把事情弄清楚

    您在技术上不必指定空矩阵来使用
    检测
    函数,因为它是默认参数

    您可以这样调用
    detect

    Ptr<FeatureDetector> detector = FeatureDetector::create("SURF");
    vector<KeyPoint> keyPoints;
    detector->detect(anImage, keyPoints);
    
    编辑:中有一个复制错误。设置
    遮罩的ROI
    ,然后将其传递给
    检测功能


    希望能把事情弄清楚

    嗨,Mevatron,我试着将ROI设置为白色。我只想检测ROI内部的关键点,而不是整个源pic。谢谢你的帮助。@Jay嘿,Jay!请参阅我编辑的回复。基本上,您只需在希望
    检测它运行的位置创建一个非零值的掩码。当我尝试如上所述设置掩码时,会出现以下错误:“OpenCV错误:断言失败(mask.empty()| |(mask.type()==CV_8UC1&&mask.size()==image.size()))在detect文件/Users/Users/Downloads/OpenCV iOS/OpenCV iOS/./OpenCV svn/modules/features2d/src/detectors.cpp中,第63行“OpenCV告诉您提供的掩码不是空的,掩码类型不是CV_8UC1,或者掩码的大小与处理后的图像不同。确保所有这些设置都正确。嗨,Mevatron,我试着将ROI设置为白色。我只想检测ROI内部的关键点,而不是整个源pic。谢谢你的帮助。@Jay嘿,Jay!请参阅我编辑的回复。基本上,您只需在希望
    检测它运行的位置创建一个非零值的掩码。当我尝试如上所述设置掩码时,会出现以下错误:“OpenCV错误:断言失败(mask.empty()| |(mask.type()==CV_8UC1&&mask.size()==image.size()))在detect文件/Users/Users/Downloads/OpenCV iOS/OpenCV iOS/./OpenCV svn/modules/features2d/src/detectors.cpp中,第63行“OpenCV告诉您提供的掩码不是空的,掩码类型不是CV_8UC1,或者掩码的大小与处理后的图像不同。确保所有这些东西都设置正确。
    
    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);