Briswell Tech Blog

ブリスウェルのテックブログです

OpenCVで出来ること

Pythonで画像や動画の処理をする時に良く使うのがOpenCVというライブラリです。

弊社でも最近

等で使用しています。

今回のブログでは、OpenCVでどんなことが出来るのかを紹介していきます。

弊社の中で
「ナレッジの蓄積と共有を積極的に行っていこう!」
という機運も高まっており、今後もこのような感じで発信を続けていきたいと思います。
よろしくお願いします。

OpenCVとは

OpenCVとはオープンソースのコンピュータビジョンライブラリです。コンピュータービジョンとは、コンピュータにデジタルな画像・動画をよく理解させることを意味します。OpenCVはその処理をするための様々な機能があります。

BSDライセンスのため、無料で使うことができ、商用利用も可能となっております。簡単な画像処理はもちろん、顔や文字領域の検出、物体の追跡などの様々な機能が用意されており簡単に扱うことが出来ます。

WindowsmacOSLinuxiOSAndroid 等のマルチな環境をサポートしています。

OpenCVのメリットとは

① インストールがとても簡単

Windowsの場合は、pipコマンド
$ pip install opencv-python
 
macOSの場合は、Homebrewを用いてbrewコマンド
$ brew install opencv
でインストール可能です。

② コードがシンプルですぐに試すことが出来る

いつも僕たちを元気付けてくれる弊社の取締役(陽治郎さん)をグレースケール化したい場合

f:id:KenjiU:20191214184005j:plain
yojiro-original.jpg
コードは以下になります。

import cv2

img = cv2.imread('yojiro-original.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
cv2.imwrite('yojiro-gray.jpg',gray)

以下のように変換されます。(掲載許可はいただいております!)
とても簡単ですね。

f:id:KenjiU:20191214184226j:plain
yojiro-gray.jpg

③ 画像解析の前処理が出来る

画像解析は、前処理がとても効果的です。
前処理とは、手元にあるデータを解析する前に、何らかの加工を施すこと。
そうすることで、アルゴリズムが学習しやすくなります。

画像のサイズを統一したり、グレースケール化・コントラスト強調・ノイズ除去等をすることで、より精度の高い機械学習が実行できます。
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()

以下のようにグラフ描画が出来ます。 f:id:KenjiU:20191214185812p:plain

数値計算ライブラリの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)

加工前

f:id:KenjiU:20191214195321j:plain
briswell-original.jpg

加工後

f:id:KenjiU:20191214195620j:plain
briswell-contrast.jpg

のように暗い部分がはっきりと見えるようになります。

まとめ

今回は、OpenCVとは何か、具体的にどのようなことができるのか、について書きました。
画像処理は目に見えて結果が分かりやすいので、プログラミングを学ぶ上でとっつきやすいのではないでしょうか。
オープンソースなので気軽に利用できるのも嬉しいですね。

株式会社ブリスウェル