Github: https://github.com/jrosebr1/imutils
imutils
OpenCVとPython 2.7とPython 3の両方で 、翻訳、回転、サイズ変更、スケルトン化、Matplotlib画像の表示などの基本的な画像処理機能を簡単に行うための一連の便利な機能。
詳細なコードレビューとともに、 PyImageSearch.comブログの次の記事をチェックしてください:
- http://www.pyimagesearch.com/2015/02/02/just-open-sourced-personal-imutils-package-series-opencv-convenience-functions/
- http://www.pyimagesearch.com/2015/03/02/convert-url-to-image-with-python-and-opencv/
- http://www.pyimagesearch.com/2015/04/06/zero-parameter-automatic-canny-edge-detection-with-python-and-opencv/
- http://www.pyimagesearch.com/2014/09/01/build-kick-ass-mobile-document-scanner-just-5-minutes/
- http://www.pyimagesearch.com/2015/08/10/checking-your-opencv-version-using-python/
インストール
NumPy、SciPy、Matplotlib、およびOpenCVが既にインストールされている場合、 imutils
パッケージは完全にインストール可能です:
$ pip install imutils
関数名のOpenCV関数の検索
OpenCVは、特にコンピュータビジョンと画像処理の学習を始めたばかりの場合、大きくて難しいライブラリにすることができます。 find_function
メソッドを使用すると、モジュール(およびオプションでサブモジュール)間で関数名をすばやく検索して、探している関数を見つけることができます。
例:
テキストのcontour
を含むすべての関数名を見てみましょう:
import imutils imutils.find_function("contour")
出力:
1. contourArea 2. drawContours 3. findContours 4. isContourConvex
したがって、 contourArea
関数は次のようにしてアクセスできます: cv2.contourArea
翻訳
平行移動とは、画像をx方向またはy方向にシフトさせることです。 OpenCVで画像を翻訳するには、 (x、y) –シフトを(t x 、t y )と表記して、変換行列Mを作成する必要があります。
そこから、 cv2.warpAffine
関数を適用する必要があります。
手動で変換行列Mをcv2.warpAffine
を呼び出すcv2.warpAffine
、単にimutils
translate
関数を呼び出すことができます。
例:
# translate the image x=25 pixels to the right and y=75 pixels up translated = imutils.translate(workspace, 25, -75)
出力:
回転
OpenCVで画像を回転するには、 cv2.getRotationMatrix2D
およびcv2.warpAffine
ます。 画像が回転する点の(x、y)座標を供給するためにさらに注意を払わなければならない。 これらの計算呼び出しは、コードをすばやく追加して、コードを大きくて読みにくくすることができます。 imutils
のrotate
関数はこの問題を解決するのに役立ちます。
例:
# loop over the angles to rotate the image for angle in xrange(0, 360, 90): # rotate the image and display it rotated = imutils.rotate(bridge, angle=angle) cv2.imshow("Angle=%d" % (angle), rotated)
出力:
サイズ変更
OpenCVでイメージのサイズを変更するには、 cv2.resize
関数を呼び出します。 ただし、アスペクト比が維持されるように特別な注意を払う必要があります。 imutils
このresize
機能はアスペクト比を維持し、キーワード引数のwidth
とheight
を提供するので、(1)アスペクト比を維持し、(2)画像の寸法が開発者によって明示的に計算される。
別のオプションのキーワード引数inter
使用して補間方法を指定することもできます。
例:
# loop over varying widths to resize the image to for width in (400, 300, 200, 100): # resize the image and display it resized = imutils.resize(workspace, width=width) cv2.imshow("Width=%dpx" % (width), resized)
出力:
スケルトン化
スケルトン化は、画像内のオブジェクトの「トポロジースケルトン」を構築するプロセスであり、オブジェクトは黒色の背景上に白であると推定されます。 OpenCVは、スケルトンを明示的に構築する機能を提供していませんが、それを行うための形態学的な関数とバイナリ関数を提供します。
便宜上、 imutils
のskeletonize
関数を使用して、画像のトポロジースケルトンを構築することができます。
最初の引数sizeは、構造要素カーネルのサイズです。 構造化要素を制御するためにオプションの引数structuring
使うことができます。デフォルトはcv2.MORPH_RECT
ですが、任意の有効な構造化要素とすることができます。
例:
# skeletonize the image gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY) skeleton = imutils.skeletonize(gray, size=(3, 3)) cv2.imshow("Skeleton", skeleton)
出力:
Matplotlibで表示する
OpenCVのPythonバインディングでは、画像はBGRの順序でNumPy配列として表されます。 これは、 cv2.imshow
関数を使用するとcv2.imshow
ます。 ただし、Matplotlibを使用する場合、 plt.imshow
関数はイメージがRGBオーダーであるとplt.imshow
ます。 cv2.cvtColor
への簡単な呼び出しはこの問題を解決するか、 opencv2matplotlib
便利関数を使用することができます。
例:
# INCORRECT: show the image without converting color spaces plt.figure("Incorrect") plt.imshow(cactus) # CORRECT: convert color spaces before using plt.imshow plt.figure("Correct") plt.imshow(imutils.opencv2matplotlib(cactus)) plt.show()
出力:
画像へのURL
このurl_to_image
関数は、ダウンロードしてOpenCV形式のNumPy配列に変換する画像のurl
という単一のパラメータを受け入れます。 この関数は、メモリ内でダウンロードを実行します。 url_to_image
関数については、PyImageSearchブログで詳しく説明しています。
例:
url = "http://pyimagesearch.com/static/pyimagesearch_logo_github.png" logo = imutils.url_to_image(url) cv2.imshow("URL to Image", logo) cv2.waitKey(0)
出力:
OpenCVバージョンの確認
OpenCV 3がついにリリースされました! しかし、メジャーリリースでは、( cv2.normalize
関数やcv2.normalize
関数などの)後方互換性の問題があります。 あなたのOpenCV 3コードがOpenCV 2.4.Xと下位互換性を持つようにするには、現在使用されているOpenCVのバージョンを確認してから適切な処置を取る必要があります。 is_cv2()
とis_cv3()
は、現在の環境のOpenCVバージョンを自動的に決定するために使用できる単純な関数です。
例:
print("Your OpenCV version: {}".format(cv2.__version__)) print("Are you using OpenCV 2.X? {}".format(imutils.is_cv2())) print("Are you using OpenCV 3.X? {}".format(imutils.is_cv3()))
出力:
Your OpenCV version: 3.0.0 Are you using OpenCV 2.X? False Are you using OpenCV 3.X? True
自動キャニーエッジ検出
キャニーエッジ検出器は、ヒステリシスを実行するときに2つのパラメータを必要とします。 しかし、最適なエッジマップを得るためにこれらの2つのパラメータを調整することは、特に画像のデータセットで作業する場合には重要ではありません。 代わりに、グレースケールのピクセル強度の中央値を使用して上限と下限のしきい値を導出するauto_canny
関数を使用できます。 ここで auto_canny
関数の詳細を読むことができます 。
例:
gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY) edgeMap = imutils.auto_canny(gray) cv2.imshow("Original", logo) cv2.imshow("Automatic Edge Map", edgeMap)
出力:
4点透視変換
コンピュータビジョンおよび画像処理における共通の課題は、画像内のROIの4点透視変換を実行し、ROIのトップダウン「鳥瞰図」を得ることである。 perspective
モジュールがこれを処理します。 このブログでは、4点透視変換を適用する現実的な例を、キック・アットのモバイル・ドキュメント・スキャナの構築に結びつけることができます 。
例
demos/perspective_transform.py
内容を参照してください。
出力:
輪郭のソート
cv2.findContours
から返される輪郭はソートされcv2.findContours
。 contours
モジュールを使用することによって、 sort_contours
関数は、 sort_contours
左から右、右から左、上から下、上から下に輪郭のリストをソートすることができます。
例:
demos/sorting_contours.py
内容を参照してください。
出力:
(再帰的に)イメージへのパスをリストする
imutils
のpaths
サブモジュールには、ルートディレクトリに基づいてイメージを再帰的に見つける関数が含まれています。
例:
私たちがdemos
ディレクトリにいると仮定して、 ../demo_images
/ ../demo_images
内容をリストアップしましょう:
from imutils import paths for imagePath in paths.list_images("../demo_images"): print imagePath
出力:
../demo_images/bridge.jpg ../demo_images/cactus.jpg ../demo_images/notecard.png ../demo_images/pyimagesearch_logo.jpg ../demo_images/shapes.png ../demo_images/workspace.jpg