我想使用SurfFeatureDetector
来检测指定图片区域的关键点:
SurfFeatureDetector
检测Train_pic keypoint_1。SurfFeatureDetector
检测Source_pic keypoint_2。 OpenCV SurfFeatureDetector
如下。
void FeatureDetector::detect(const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat())
mask - 指定查找关键点的位置的掩码(可选)。必须是感兴趣区域中具有非零值的char矩阵。
任何人都可以帮助解释如何为Source_pic创建mask=Mat()
由于 杰
答案 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
函数。
希望能够解决问题!