Python での OpenCV キャニー
opencv
ライブラリを使用して、人工知能、機械学習、およびその他の技術におけるコンピューター ビジョン用の画像とグラフィックスを操作します。 このライブラリの機能を使用して、画像を効率的に読み取って処理できます。
このチュートリアルでは、Python での cv2.canny()
関数のデモを行います。
Python で cv2.canny()
関数を使用する
cv2.canny()
関数は、John F. Canny によって開発された Canny Edge Detection アルゴリズムを実装しています。 この関数を使用して、特定の画像からエッジを検出できます。
アルゴリズム自体には複数の段階があります。
-
第 1 段階ではノイズ リダクションが行われます。このために、アルゴリズムは 5x5 ガウス フィルターを使用します。
-
次の段階では、与えられた画像の強度勾配を見つけます。 この段階で、画像は平滑化されてからソーベル カーネルに渡され、そこで x 軸と y 軸に沿ってフィルター処理され、各軸の勾配が検出されます。
-
第 3 段階では、エッジを形成しない望ましくないピクセルを除去するために、すべてのピクセルが勾配方向の極大値でチェックされます。
-
最終段階は、エッジが分類される段階です。
minVal
とmaxVal
の 2つのしきい値が取得されます。maxVal
より大きい勾配値を持つエッジはエッジであり、minVal
より小さいエッジはエッジではありません。 これらのしきい値の残りは、接続性に基づいて分類されます。
上記のすべての段階は、cv2.canny()
関数によって実装されます。 この関数のパラメーターを決定する際には、これらの段階について知る必要があります。
次の例では、画像からエッジを検出します。
import cv2
img = cv2.imread("deftstack.png")
e = cv2.Canny(img, threshold1=50, threshold2=100)
cv2.imshow("Edges Detected", e)
cv2.waitKey(0)
cv2.destroyAllWindows()
上記の例では、cv2.imread()
関数を使用して画像を読み取ります。 cv2.canny()
関数を使用して、この画像のエッジが検出されます。
関数 threshold1
と threshold2
の 2つのパラメーターに注意してください。 これらの 2つのパラメーターは、前述の minVal
および maxVal
しきい値頻度の値です。
これら 2つの値を指定することは必須です。
指定された画像のエッジを分類した後、cv2.imshow()
関数を使用して新しいウィンドウに表示します。 cv2.waitkey(0)
関数は、インタープリターが作成されたウィンドウを自動的に閉じて、ユーザーが何らかのキーを押すのを待つのを防ぐために、例で使用されています。
cv2.destroyAllWindows()
関数はすべてのウィンドウを閉じます。
cv2.canny()
関数は、apertureSize
と L2gradient
という 2つの追加のオプション パラメータも受け入れます。 apertureSize
パラメーターは、ソーベル カーネルのアパーチャのサイズを指定します。
デフォルトでは、その値は 3 で、3 から 5 の間の任意の奇数値を取ることができます。 apertureSize
を大きくして、画像からより多くの機能を取得できます。
L2gradient
は True
または False
の値を取り、デフォルトは False
です。
L2gradient
パラメータを True
として指定すると、新しい L2Gradient
アルゴリズムを使用して勾配値が計算されます。 それ以外の場合は、従来の式が使用されます。 新しいアルゴリズムは、もう少し正確になる傾向があります。
まとめ
このチュートリアルでは、cv2.canny()
関数の使用方法について説明しました。 Canny Edge 検出アルゴリズムと、この関数がそれを内部に実装する方法について説明しました。
例を挙げて機能を説明しました。 この関数のパラメーターについても説明しました。
一部は必須の threshold1
と threshold2
でしたが、その他はオプションの apertureSize
と L2gradient
でした。
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn