LoginSignup
13
13

More than 5 years have passed since last update.

始めてのOpenCV [ Node.js ]

Last updated at Posted at 2016-09-12

自己紹介

じゅんじゅんというニックネームで、関西を拠点に活動しているフロントエンドエンジニアです。

HAL大阪の2回生です👍 (2016.9.12現在)

よくstart up系イベントに行くので、大阪らへんの方は会いましょう!

OpenCVとは

OpenCVとは、Intelによって開発された、画像認識に関連する機能のライブラリのことである。 OpenCVは、コンピュータビジョンと呼ばれる、画像認識・解析に関するコンピューティング技術が主な用途として想定されている。

画像認証・解析ができるライブラリです!

まず、本体にインストールしなければいけません。

以下の記事を参考にインストールしてください。

MacにOpenCVをインストールする方法

Dissimilarity

今回は、OpenCVで2枚の画像がどれだけ似ているかを数値化できるものを使います。

ファイルの構成は

- app.js
- images/
    - image files...
- package.json

開発

先ほどのOpenCVをNode.jsから扱えるように、npmでnode-opencvをインストールします。

peterbraden/node-opencv

npm install opencv

これで開発環境は整いました!

早速app.jsを書いていきましょう。

今回はimages/に僕のアイコンを用意しました!

スクリーンショット 2016-09-12 17.22.23.png

この2枚はどれぐらい似ているんでしょうか!

app.js
var cv = require('opencv');

if (cv.ImageSimilarity === undefined) {
  console.log('TODO: Please port Features2d.cc to OpenCV 3')
  process.exit(0);
}

cv.readImage("./images/icon.jpg",function(err,im){
  if (err) throw err;

  cv.readImage("./images/icon2.jpg",function(err,im1){
    if (err) throw err;

    cv.ImageSimilarity(im,im1,function(err,dissimilarity){
      if(err) throw err;

      console.log(`Similarity: ${100 - Math.round(dissimilarity)}`);

    })      

  });

});

まず、cvにopencvを読み込みます。

このcvのreadImageメソッドを使い画像を読み込み、matrixを返します。

それを2つ用意し、ImageSimilarityメソッドを使い二つの画像の相違を数値化します。

その数は、callbackのdissimilarityに入っています。

ここで帰ってくる値は相違の数値なことに気をつけてください。

つまりここでかえってくる数が多い→相違点が多い→似ていない。となります。

ではこれを大雑把ですが四捨五入して100から引いてどれだけ似ているか。に変えてあげる必要があります。

(100から引いているのは、上限が100くさいぞ...ってだけなので玄人の方、間違っている場合コメント欄で指摘ください。。)

dissimilarityを四捨五入して100から引くので

100 - Math.round(dissimilarity)となります。

最後に

今回、初めてNodeでOpenCVを触ってみました。

いくつもメソッドがあるので、やりたいことを実現するのに方法を選定していかないとな〜と思いました。

参考にした記事

のびすけさんの記事は、参考になるものが多いです...さすがすぎる...

Twitter是非フォローしてね! @konojunya

13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13