教育

機械学習初心者が知りたい!オープンソースライブラリ「OpenCV4」の使い方

機械学習初心者が知りたい!オープンソースライブラリ「OpenCV4」の使い方

機械学習の本で画像関係の項目を見ているとOpenCVという用語を見かけますよね。

このOpenCVですがバージョンアップが進み現在OpenCV4というものも登場しています。

とはいっても書籍で頻繁に説明されるのはOpenCV3の方であり肝心の4の説明があまりなされていないのも事実。

そこで今回はOpenCV4を実際に動かしたりおすすめの本を紹介することで新しいバージョンにも慣れていくのを目指していきます。

Anacondaというパッケージで動かすのを想定しておりWindows・Macそれぞれのインストール方法を解説した記事があるのでそちらを参照してください。

中村
中村

それではまず、そもそもOpenCV4とは何かからお伝えします。

ライブラリ「OpenCV4」とは何か

ライブラリのイメージ

まず、OpenCVはインテルが開発し公開したライブラリのこと。

元々の名称はOpen Source Computer Vision LibraryでOpen Sourceとついていることからもわかる通り商用目的であっても基本的に無料で使うことができます。

このライブラリによってカバーできるのは画像の処理や解析、機械学習など。

そのため機械学習を学ぶ中で画像を扱うのであれば知っておきたいライブラリの一つとなります。

この記事ではPythonでの活用を想定し進めていきますがCやC++、JavaにMATLABでも利用することも可能。

OpenCVの中で2019年の4月から出ている新しいバージョンがOpenCV4なのです。

OpenCV4でできることとは

画像編集のイメージ

OpenCV4について触れたので今度は何ができるのか一つ一つ見ていきましょう。

画像の読み込み

まずは画像の読み込み。

画像のデータを認識し表示するまで一通り担当してくれます。

画像や動画は各ピクセルごとで数値化、それらをリストにまとめることでプログラム上でも表示させることができるのです。

画像の前処理

OpenCV4を使えば機械学習の前処理のために画像を編集したり加工することも簡単にできます。

この画像の編集や加工というのが非常に重要なステップ。

というのも画像ごとで大きさや容量に相違があるのにそのまま使うとせっかく学習しても精度が上がらない原因になる場合があるからです。

OpenCV4にはトリミングや大きさの変更、回転機能などが揃っており学習しやすい形に整えることが可能。

この機能を使って一つの画像からピクセル配置が違うものも新しいデータとして水増しすることもできるのでディープラーニングで非常に多くの画像データが求められる時でも対応することができます。

他にも画像の色データをグレースケールに変換することで計算量を減らしたりノイズを取り除いて解析できるようにするなど前処理を進めていく上でOpenCV4の存在は欠かせません。

ディープラーニング

OpenCV4を用いてディープラーニングもできます。

ここでできるのは物体検出とテンプレートマッチングの二つ。

それぞれ見ていきましょう。

まず、物体検出は画像から物体のカテゴリーや位置を判別すること。

例えば看板を画像データとして扱う場合で考えてみます。

街中にある看板を学習させることで他の人がスマホのカメラなどでその看板を読み取った時位置を特定したりその場でクーポンやウェブサイトを表示させるというような活用方法が期待できます。

これができるようにするにはディープラーニングが不可欠。

マシンに学習させることで画像があればあるほどより正確な解析ができるようになります。

テンプレートマッチングは与えられた画像から他で指定した画像と類似する部分を見つける処理のこと。

活用事例としてあげられるのはFacebookやGooglePhoto。

フォルダにある写真と同じ人かどうか判定する時などで活用されています。

ディープラーニングを始めとする技術で判別の精度は上がっておりテンプレートマッチングの実行でOpenCVも一役買っているのです。

PythonでOpenCV4を動かしてみる-インストール編-

インストールのイメージ

OpenCV4でできることについて触れたので私達も実際に動かしてみましょう。

まずAnacondaを開いてQt Consoleを開いてください。

コンソールが表示されたら

pip install opencv-python

と入力しそのままエンター。

そうすることでOpenCV4をインストールしてくれます。

PythonでOpenCV4を動かしてみる-使い方編-

コンピュータのイメージ

インストールが完了したら早速動かしてみましょう。

今回はAnacondaよりJupyterLabとpixabayというサイトにある画像を使用します。

画像の読み込みや書き込みについては同じフォルダ内での操作を想定しています。

画像の読み込み

最初に画像の読み込みです。

まずはライブラリのインポートをしていきます。

import cv2 #OpenCV4でもcv2と表記するので注意
import numpy as np

画像の読み込みのコードですが以下の書式となっているのでそこから押さえていきましょう。

img = cv2.imread(filename[,flag])

ここにあるfilenameは読み込む画像ファイルの名前のこと。

imgという変数名になってますが読み込んだ画像の画素値をNumPy配列として格納しています。

その次にポイントとなるのがflagという部分。

ここで数字を指定することになりますが0ならグレースケール(1bit)、1ならRGB(3bit)、-1ならRGBA(4bit)の画像として読み込むこととなります。

今回は3bitとなるRGBの画像として読み込んで作業に入ります。

img = cv2.imread("argument-238529_1920.jpg", 1)

画像の表示

画像を読み込んだので表示をさせましょう。

読み込んだ時にはimreadを使いましたが表示ではimshowを使います。

下にあるwaitKey() はキーボード入力を処理する関数。

引数では入力までの待ち時間でミリ秒単位で指定することになります。

待っている間に何か打てばその先の処理を進めてくれます。

今回指定する引数は0。

この場合は何か打つまでずっと待ち続けてくれます。

cv2.destroyAllWindows()

は現在までに作られた全てのウィンドウを閉じる関数で全て閉じたくない時はウィンドウ名から関数内で指定することもできます。

origin = cv2.imread("argument-238529_1920.jpg", 1)
cv2.imshow('origin',origin)
cv2.waitKey(0)
cv2.destroyAllWindows()

出力画像1枚目

サイズ変更

画像の読み込みができたもののサイズがけっこう大きいですよね。

一旦サイズを小さくしましょう。

ポイントはimshow()の前にresizeを入れるのみ。

resizeの後1つ目の引数に入力画像の変数名、次にタプル形式で画像サイズの幅と高さを指定します。

small = cv2.imread("argument-238529_1920.jpg", 1)
small = cv2.resize(small, (400, 300))
cv2.imshow('small', small)
cv2.waitKey(0)
cv2.destroyAllWindows()

出力画像2枚目

画像に描画

今度は画像に簡単な編集を加えてみましょう。

ここではパンチされている男性の目元を黒い四角で多いつつグローブの上のあたりに”Fight!”という文字列を表示するのを目指します。

文字列の描画

文字列の描画ではputTextという関数を用います。

記述の仕方は

putText(画像, 文字列, 位置(X, Y), フォント, 倍率, 色(B, G, R), 線の太さ)

とかなり長め。

位置(X, Y)で指定するのは描画する文字列の左下の角の座標となります。

fight = cv2.imread('argument-238529_1920.jpg', 1)
cv2.putText(fight, 'Fight!', (830, 300), cv2.FONT_HERSHEY_SIMPLEX, 5.0, (0, 0, 255), 16)
cv2.imshow('fight', fight)

cv2.waitKey(0)
cv2.destroyAllWindows()

出力画像3枚目

長方形の描画

次に長方形を描画します。

ここで使用するのはrectangle。

rectangle(画像, 左上座標(X, Y), 右下座標(X, Y), 色(B, G, R), 線の太さ)

という形で表記し線の太さを-1に設定することで中身を塗りつぶすことになります。

black = cv2.imread('argument-238529_1920.jpg', 1)
cv2.rectangle(black, (680, 520), (380, 420), (20, 20, 20), -1)
cv2.imshow('black', black)

cv2.waitKey(0)
cv2.destroyAllWindows()

出力画像4枚目

両方描画

それぞれ描画ができたので両方とも表示させてみましょう。

full = cv2.imread('argument-238529_1920.jpg', 1)
cv2.putText(full, 'Fight!', (830, 300), cv2.FONT_HERSHEY_SIMPLEX, 5.0, (0, 0, 255), 16)
cv2.rectangle(full, (680, 520), (380, 420), (20, 20, 20), -1)
cv2.imshow('NO MORE UWAKI!', full)

cv2.waitKey(0)
cv2.destroyAllWindows()

出力画像5枚目

画像を書き込み

最後に先程完成させた画像を保存しましょう。

ここではimwriteを使用。

cv2.imwrite(filename, img)

という形式の中でfilenameは書き出す画像の名前、imgは書き込みをする画像の変数名を入れます。

cv2.imwrite("no_more_uwaki.jpg", full)
True

念の為表示させてみましょう。

test = cv2.imread("no_more_uwaki.jpg", 1)
cv2.imshow('test',test)
cv2.waitKey(0)
cv2.destroyAllWindows()

フォルダ内に追加されつつきちんと表示されていれば成功です。

出力画像6枚目

OpenCV4について学べる書籍3選

厳選された本のイメージ

OpenCV4を実際に動かしてみたのでこれから勉強するのにおすすめの定番の本を3冊ご紹介します。

Pythonで始めるOpenCV 4プログラミング

この本は開発環境として使用するAnacondaの導入から開始、簡単なチュートリアルの後サンプルプログラムを用いながらOpenCV4を用いた処理の方法を学んでいきます。

本書では画像だけでなく動画処理についても触れられておりOpenCV4の凄さを体感することに。

最後にはディープラーニングについても触れられておりより発展的な学習に向けてのモチベーションを得られます。


Pythonで始めるOpenCV 4プログラミング

OpenCV4基本プログラミング―さらに進化した画像処理ライブラリの定番

この本は画像処理や動画処理に対しC++という言語を用いて解説されたもの。

OpenCV3という前のバージョンとの相違点についてを説明、操作方法について先程紹介した本と同じくサンプルプログラムを用いて学んでいくことができます。

また、Visual Studioのインストールをする方法についても触れられているので、Python以外の言語を使いたいという方への選択肢の一つとして紹介しました。


OpenCV4基本プログラミング―さらに進化した画像処理ライブラリの定番

実践OpenCV4 for Python―画像映像情報処理と機械学習

最後に紹介する本は今回ご紹介している本の中で最も新しいもの。

この本ではPythonを用いており画像情報の取得や物体検知認識など各冒頭で設定された課題をサンプルとともに達成していくのを目指していくことになります。

その後そういったプログラムを調整したり改良したりすることでOpenCV4やアルゴリズムについて慣れていくことも可能。

最終的には自身でアプリケーションを作れるようになるのも不可能ではなく画像や動画の扱いに限らずプログラミングの楽しさを知る良き入口となること間違いありません。


実践OpenCV4 for Python―画像映像情報処理と機械学習

スマホで写真撮影

今回はOpenCV4をテーマにそもそもOpenCVとは何かというところからOpenCV4にできることから初め操作方法やおすすめの学習書3冊を紹介していきました。

OpenCVは画像の処理や解析、機械学習などをカバーしたフリーのライブラリで2年前より新しいバージョンとなるOpenCV4がリリースされています。

この記事ではPythonでの操作を想定し操作方法について触れましたがC++など他の言語でも使用可能。

そういった理由でおすすめした3冊の中に「Pythonで始めるOpenCV 4プログラミング」や「実践OpenCV4 for Python―画像映像情報処理と機械学習」の他にC++を用いて解説されている「OpenCV4基本プログラミング―さらに進化した画像処理ライブラリの定番」も入れました。

OpenCV4をマスターすることで画像や動画についてアプリなど自分で便利なものを作れるといいですよね。

【お知らせ】

当メディア(AIZINE)を運営しているAI(人工知能)/DX(デジタルトランスフォーメーション)開発会社お多福ラボでは「福をふりまく」をミッションに、スピード、提案内容、価格、全てにおいて期待を上回り、徹底的な顧客志向で小規模から大規模ソリューションまで幅広く対応しています。

御社の悩みを強みに変える仕組みづくりのお手伝いを致しますので、ぜひご相談ください。

お多福ラボコーポレートサイトへのバナー

トップへ戻る
タイトルとURLをコピーしました