Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

[Node.js] OpenCVで物体の特徴点を抽出、マッチングさせてみた

More than 1 year has passed since last update.

はじめに

大学の研究でOpenCVを使う機会があり、調べたところnpm moduleが出ていたので遊んでみた。
今回は、二枚の画像から特徴点を抽出し、マッチングさせていきます。

OpenCVとは

 OpenCV(正式名称: Open Source Computer Vision Library)は、オープンソースのコンピューター・ビジョン・ライブラリです。コンピューターで画像や動画を処理するのに必要な、さまざま機能が実装されており、BSDライセンスで配布されていることから学術用途だけでなく商用目的でも利用できます。加えて、マルチプラットフォーム対応されているため、幅広い場面で利用されていることが特徴です。

環境構築

1.モジュールをインストールする。
 npm install --save opencv4nodejs
これで開発環境は整いました!

使用例

sample.js
const cv = require('opencv4nodejs');

const matchFeatures = ({ img1, img2, detector, matchFunc }) => {

  const keyPoints1 = detector.detect(img1);
  const keyPoints2 = detector.detect(img2);

  const descriptors1 = detector.compute(img1, keyPoints1);
  const descriptors2 = detector.compute(img2, keyPoints2);

  const matches = matchFunc(descriptors1, descriptors2);

  const bestN = 40;
  const bestMatches = matches.sort(
    (match1, match2) => match1.distance - match2.distance
  ).slice(0, bestN);

  return cv.drawMatches(
    img1,
    img2,
    keyPoints1,
    keyPoints2,
    bestMatches
  );
};

const img1 = cv.imread('画像のパス');
const img2 = cv.imread('画像のパス');

//SIFTで特徴点を抽出
if (cv.xmodules.xfeatures2d) {
  const siftMatchesImg = matchFeatures({
    img1,
    img2,
    detector: new cv.SIFTDetector({ nFeatures: 2000 }),
    matchFunc: cv.matchFlannBased
  });
  cv.imshowWait('SIFT matches', siftMatchesImg);
} else {
  console.log('skipping SIFT matches');
}

//ORBで特徴点を抽出
const orbMatchesImg = matchFeatures({
  img1,
  img2,
  detector: new cv.ORBDetector(),
  matchFunc: cv.matchBruteForceHamming
});
cv.imshowWait('ORB matches', orbMatchesImg);

一応Githubのリポジトリを貼っておきます。
https://github.com/toshi1127/node_openCV.git

実行結果

SIFTによる、キーポイント検出とマッチング

match.png

ORBによる、キーポイント検出とマッチング

match.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away