OpenCVは、pythonやC++、JAVAなどのプログラミングで画像処理をやるのにベーシックでスタンダードな手法です。
しかし、画像中のオブジェクト認識やクラス分類などの高度なタスクでは、ディープラーニングを使った機械学習(いわゆる人工知能)を用いた方が圧倒的に精度も良く、もっぱらの主流。
となると、今更あえてOpenCVを勉強して使いこなせるようになるメリットはあまりない気もするかもしれません。
ただ、機械学習で画像認識をやるにしても何かと便利なOpenCVは必ず使うことになります。
そこで、特に扱いやすいpythonを使うことを前提に、OpenCVのおいしいところだけを凝縮して解説してみたいと思います。
また、扱いやすいからこそ注意点もありますので併せて紹介していきます。
OpenCVとは
OpenCV(Open Source Computer Vision)は、オープンソースのコンピュータビジョン向けライブラリのことで、あらゆる画像処理機能が実装されています。
もともとはC言語ベースでしたが、JAVAやpythonにも対応。商用目的でも利用できますし、加えて、マルチプラットフォーム(Windows、Linux、macOS、iOS、…)に対応しているので、幅広い場面で利用されています。
2006年に1.0がリリースされ、現在はversion4までリリースされています。
OpenCVが必要なとき
OpenCVを使えば基本的に画像処理はなんでもできちゃいます。
といってもプログラミングが必要なので、ただ画像の編集をするなら専用アプリを使った方が簡単。
では、どんなときにOpenCVが必要になるか?というと、プログラミングで画像や動画を扱うときです。
最近だと、画像認識系の機械学習(ディープラーニングなど)をやる場合にも画像の取り込みや表示、結果の保存などにはOpenCVが使われます。
上の画像も、犬や自転車、車の認識自体はディープラーニングによるものですが、画像の取り込みやバウンディングボックス(認識結果の枠)の描画、出来上がった画像の画面表示や保存などはOpenCVを使っています。
これから機械学習を勉強したいという場合も、OpenCVの基本的な使い方を理解しておくと学習がスムーズになるかと思います。
OpenCVのインストール方法と注意点
単にOpenCVを使いたいというのであれば、最新バージョンをインストールすれば良いのですが、実際は、機械学習や別の目的の何かに付随してOpenCVが必要となることが多く、バージョンを指定して環境構築する必要があります。
pipによるインストール/アンインストール方法
C++だと少し面倒なこともありますが、python用のOpenCVであればpipを使って1行のコマンドだけでインストールできます。
pip3 install opencv-python
これだと最新バージョンがインストールされるので、バージョン指定する場合は以下のようにバージョンを指定します。(X.X.Xのところは4.1.2などのバージョン)
pip3 install opencv-python==X.X.X
間違えたバージョンをインストールしてしまったり、不要になった場合も簡単にアンインストールできます。
pip3 uninstall opencv-python
また、メイン機能はこれだけで十分ですが、参考までにcontrib (extra) モジュールというものがあります。
contrib (extra) モジュールはOpenCVの機能拡張ライブラリ群で、OpenCVを駆使してより高度なことを実現したい場合は必要になるかもしれません。
pip3 install opencv-contrib-python
ただし、contribを商用利用する場合はライブラリ毎にライセンスの確認が必要となります。
OpenCV-pythonインストール時の注意点
pythonのOpenCVは便利でインストールも簡単な故に、バージョン管理には注意が必要です。
例えば、勉強したり使ってみたい機械学習アルゴリズムを試してみる場合、下準備として依存関係のあるパッケージをインストールしておくことが必要になります。
インストール方法やチュートリアルには、さらっと『必要となるパッケージはrequire.txtにまとめて書かれているのでpipでインストールしておいてね』と書かれていたりします。
pip3 install require.txt
ここで、require.txtに”opencv-python>=4.1.2″と書かれていたりするとバージョン4.1.2以上のOpenCVがインストールされます。
もともとインストールしていたバージョンを上書きしてインストールしてしまうので、以前のバージョンで使用していた別のライブラリが動かなくなることがあります。
これはOpenCVに限らず、pythonあるあるなので、pyenv-virtualenvやpoetry、condaなどで環境を分ける必要があります。
pipやpyenvのインストールの方法についてはこちらの記事も参考にしてみてください。
OpenCVの基本的な使い方
OpenCVの機能は膨大なのですが、基本的な使い方はかなりシンプルなので一連の型として覚えておきましょう。
macで使うときのpythonコード例
pythonでOpenCVを使うときの基本的で実用的な構文がこちらです。
import cv2
# Video
frameWidth = 640
frameHeight = 480
#Video Source
#cap = cv2.VideoCapture('data/traffic.mp4') #自分のmp4のpathを入力
cap = cv2.VideoCapture(2) #macbookのフェイスカメラを使用する場合
while True:
ret, img = cap.read()
img = cv2.resize(img, (frameWidth, frameHeight))
cv2.imshow('Video', img)
# qを押すと止まる。
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
それぞれの意味や使い方を順に解説していきます。
import cv2
OpenCVにはバージョン4まであると解説しましたが、バージョン3でも4でもインポートするときはcv2です。
cv2.VideoCapture(2)
OpenCVで動画ファイルやカメラ(内蔵カメラ・USBカメラ・Webカメラ)の映像を読み込んで処理するにはVideoCaptureクラスを使います。
PCに搭載しているウェブカメラを使用する場合、windowsやlinuxだとcv2.VideoCapture(0)と紹介されていることが多いですが、macのフェイスカメラを使う場合はcv2.VideoCapture(2)となると思います。
エラーとなる場合は、0や1などを試してみると良いでしょう。
また、
videocapture('videofilename')
とすれば動画ファイルを読み込むこともできます。
cap.read()
cap = cv2.VideoCapture(2)とした後は、read()関数で更新された画像を取り込みます。
cv2.imshow() & cv2.waitKey()
cv2.imshowで指定したウィンドウ名で画像を表示させます。
ただし、cv2.waitKeyをコールしないと実際の画面には表示してくれません。
imshow()とwaitkey()はセットで覚えておきます。
また、waitkey()はキー入力を読み込む関数でもあり、出力画像のwindowをアクティブにした状態にするとキーボードの入力を読み込むことができます。
‘q'(quitの意味)を押下することでループ処理から抜け出し、プログラムを終了させるというのが慣例としてよく使われます。
cv2.destroyAllWindows()
destroyAllWindows() は現在までに作られた全てのウィンドウを閉じる関数です。特定のウィンドウのみを閉じる場合は cv2.destroyWindow(‘window_name’) 関数に閉じたいウィンドウ名を指定して閉じることができます。
まとめ
今回はpythonでOpenCVが必要になるときを想定して、実用的なOpenCVの構文について解説しました。
また、macに導入する際のインストール方法や注意点について紹介しました。