GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

jrosebr1

imutils – OpenCVとPythonで、翻訳、回転、サイズ変更、スケルトン化、Matplotlib画像の表示などの基本的な画像処理操作を簡単に行うため..

投稿日:

OpenCVとPythonで、翻訳、回転、サイズ変更、スケルトン化、Matplotlib画像の表示などの基本的な画像処理操作を簡単に行うための一連の便利な機能。

imutils

OpenCVとPython 2.7とPython 3の両方で 、翻訳、回転、サイズ変更、スケルトン化、Matplotlib画像の表示などの基本的な画像処理機能を簡単に行うための一連の便利な機能。

詳細なコードレビューとともに、 PyImageSearch.comブログの次の記事をチェックしてください:

インストール

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関数を適用する必要があります。

手動で変換行列Mcv2.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)座標を供給するためにさらに注意を払わなければならない。 これらの計算呼び出しは、コードをすばやく追加して、コードを大きくて読みにくくすることができます。 imutilsrotate関数はこの問題を解決するのに役立ちます。

例:

# 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機能はアスペクト比を維持し、キーワード引数のwidthheightを提供するので、(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は、スケルトンを明示的に構築する機能を提供していませんが、それを行うための形態学的な関数とバイナリ関数を提供します。

便宜上、 imutilsskeletonize関数を使用して、画像のトポロジースケルトンを構築することができます。

最初の引数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内容を参照してください。

出力:

(再帰的に)イメージへのパスをリストする

imutilspathsサブモジュールには、ルートディレクトリに基づいてイメージを再帰的に見つける関数が含まれています。

例:

私たちが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







-jrosebr1

執筆者: