Pythonで画像や動画の処理をする時に良く使うのがOpenCVというライブラリです。
弊社でも最近
- ディープラーニングの学習用画像データの前処理
- デプス(深度)画像解析
- 顔検出処理
等で使用しています。
今回のブログでは、OpenCVでどんなことが出来るのかを紹介していきます。
弊社の中で
「ナレッジの蓄積と共有を積極的に行っていこう!」
という機運も高まっており、今後もこのような感じで発信を続けていきたいと思います。
よろしくお願いします。
OpenCVとは
OpenCVとはオープンソースのコンピュータビジョンライブラリです。コンピュータービジョンとは、コンピュータにデジタルな画像・動画をよく理解させることを意味します。OpenCVはその処理をするための様々な機能があります。
BSDライセンスのため、無料で使うことができ、商用利用も可能となっております。簡単な画像処理はもちろん、顔や文字領域の検出、物体の追跡などの様々な機能が用意されており簡単に扱うことが出来ます。
Windows、macOS、Linux、iOS、Android 等のマルチな環境をサポートしています。
OpenCVのメリットとは
① インストールがとても簡単
Windowsの場合は、pipコマンド
$ pip install opencv-python
macOSの場合は、Homebrewを用いてbrewコマンド
$ brew install opencv
でインストール可能です。
② コードがシンプルですぐに試すことが出来る
いつも僕たちを元気付けてくれる弊社の取締役(陽治郎さん)をグレースケール化したい場合 コードは以下になります。
import cv2 img = cv2.imread('yojiro-original.jpg') gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) cv2.imwrite('yojiro-gray.jpg',gray)
以下のように変換されます。(掲載許可はいただいております!)
とても簡単ですね。
③ 画像解析の前処理が出来る
画像解析は、前処理がとても効果的です。
前処理とは、手元にあるデータを解析する前に、何らかの加工を施すこと。
そうすることで、アルゴリズムが学習しやすくなります。
画像のサイズを統一したり、グレースケール化・コントラスト強調・ノイズ除去等をすることで、より精度の高い機械学習が実行できます。
OpenCVを使えばこのような前処理の作業を簡略化できます。
④ 他のライブラリと組み合わせることが出来る
描画ライブラリのMatplotlibと組み合わせると
import cv2 from matplotlib import pyplot as plt img = cv2.imread('yojiro-original.jpg') img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(img) plt.show()
以下のようにグラフ描画が出来ます。
数値計算ライブラリのNumPyと組み合わせると
import cv2 import numpy as np gamma = 2 lookUpTable = np.zeros((256, 1), dtype = 'uint8') for i in range(256): lookUpTable[i][0] = 255 * pow(float(i) / 255, 1.0 / gamma) img_src = cv2.imread('briswell-original.jpg', 1) img_gamma = cv2.LUT(img_src, lookUpTable) cv2.imwrite('briswell-contrast.jpg', img_gamma)
加工前
加工後
のように暗い部分がはっきりと見えるようになります。
まとめ
今回は、OpenCVとは何か、具体的にどのようなことができるのか、について書きました。
画像処理は目に見えて結果が分かりやすいので、プログラミングを学ぶ上でとっつきやすいのではないでしょうか。
オープンソースなので気軽に利用できるのも嬉しいですね。