SurfFeatureDetector и создание пустой маски с помощью Mat () - PullRequest
1 голос
/ 28 марта 2012

Я хотел бы использовать SurfFeatureDetector для определения ключевых точек при указании области изображения:

  1. Train_pic & Source_pic
  2. Определить Train_pic keypoint_1 с помощью SurfFeatureDetector.
  3. Обнаружение Source_pic keypoint_2 с использованием SurfFeatureDetector в указанной области.
  4. Вычислить и сопоставить.

OpenCV SurfFeatureDetector, как показано ниже.

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

mask - Маска, указывающая, где искать ключевые точки (необязательно). Должна быть символьной матрицей с ненулевыми значениями в интересующей области.

Может кто-нибудь поможет объяснить, как создать mask=Mat() для Source_pic?

Спасибо Jay

1 Ответ

4 голосов
/ 29 марта 2012

Технически не нужно указывать пустую матрицу для использования функции 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);

РЕДАКТИРОВАТЬ: Там была ошибка копирования макаронных изделий. Установите ROI для mask, а затем передайте его функции detect.

Надеюсь, что все прояснилось!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...