opencv3
画像処理、画像解析、機械学習系のパッケージ。インテルが開発。C/C++, Java, Python, MATLAB向けライブラリがある。
Windowsへのインストール
Anacondaを利用していれば、基本的にはAnaconda経由でよい。デフォルトレポジトリには無いが、Anaconda Cloudで探せばある。
Search :: Anaconda Cloud から、Windows版が提供されているレポジトリからインストールを試みる。
ただし、なかなか巨大なライブラリ故に各提供者はそこまで頻繁に更新してくれているわけでは無いため、最新のPythonのバージョンでは依存関係のためインストールできない場合がある。 依存関係でエラーが出たら、エラーメッセージから対応するPythonのバージョンを確認し、新しく、古いバージョンの環境を構築する(奇妙な言い回し)。
注意
日本語パス名
パスにUNIX文字以外が含まれると、imread(), imwrite()
が正しく機能しない。
Python OpenCV の cv2.imread 及び cv2.imwrite で日本語を含むファイルパスを取り扱う際の問題への対処について - Qiita
特にimwrite()
は何も言わずに出力だけがされないため、気付きにくいし原因が掴みづらい。
使い方
画像をクリッピング
画像は、[縦Px数, 横Px数, 3(RGB色情報)]
のNumPy配列で表現される。RGB色情報は、[G, B, R]の順なので注意。
なので、クリッピングは配列切り出しでいける。
import cv2 image = cv2.imread('sample.jpg') # X座標300~399, Y座標100~199を切り出し clipped = image[100:200, 300:400] cv2.imshow(clipped)
動画からフレームを指定して画像として保存
1フレームずつ読むのはwhileで回せば良いが、当然ながら遅い。指定のフレームまで飛ばしたいときは、cap.set()
を利用する。
import cv2 def save_frame(video_path, save_path, frame): cap = cv2.VideoCapture(video_path) cap.set(cv2.CAP_PROP_POOS_FRAMES, frame) flag, image = cap.read() if flag == False: print('エラー') return cv2.imwrite(save_path, image)