1

SurfFeatureDetector写真の領域を指定する際にキーポイントを検出するために使用したいと思います。

  1. Train_pic & Source_pic
  2. を使用して Train_pic keypoint_1 を検出しSurfFeatureDetectorます。
  3. 領域指定で使用する Source_pic keypoint_2 を検出SurfFeatureDetectorします。
  4. 計算して一致させます。

SurfFeatureDetector以下のようにOpenCV 。

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

mask – キーポイントを探す場所を指定するマスク (オプション)。対象領域にゼロ以外の値を持つ char 行列でなければなりません。

mask=Mat()Source_pic の作成方法を説明できる人はいますか?

ありがとうジェイ

4

1 に答える 1

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);

編集:そこにコピーパスタエラーがありました。の ROI を設定し、maskそれをdetect関数に渡します。

問題が解決することを願っています。

于 2012-03-29T00:58:05.193 に答える