Python での OpenCV キャニー

Manav Narula 2023年6月21日
  1. Python で cv2.canny() 関数を使用する
  2. まとめ
Python での OpenCV キャニー

opencv ライブラリを使用して、人工知能、機械学習、およびその他の技術におけるコンピューター ビジョン用の画像とグラフィックスを操作します。 このライブラリの機能を使用して、画像を効率的に読み取って処理できます。

このチュートリアルでは、Python での cv2.canny() 関数のデモを行います。

Python で cv2.canny() 関数を使用する

cv2.canny() 関数は、John F. Canny によって開発された Canny Edge Detection アルゴリズムを実装しています。 この関数を使用して、特定の画像からエッジを検出できます。

アルゴリズム自体には複数の段階があります。

  1. 第 1 段階ではノイズ リダクションが行われます。このために、アルゴリズムは 5x5 ガウス フィルターを使用します。

  2. 次の段階では、与えられた画像の強度勾配を見つけます。 この段階で、画像は平滑化されてからソーベル カーネルに渡され、そこで x 軸と y 軸に沿ってフィルター処理され、各軸の勾配が検出されます。

  3. 第 3 段階では、エッジを形成しない望ましくないピクセルを除去するために、すべてのピクセルが勾配方向の極大値でチェックされます。

  4. 最終段階は、エッジが分類される段階です。 minValmaxVal の 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()

opencv のキャニー関数を使用したエッジの検出

上記の例では、cv2.imread() 関数を使用して画像を読み取ります。 cv2.canny() 関数を使用して、この画像のエッジが検出されます。

関数 threshold1threshold2 の 2つのパラメーターに注意してください。 これらの 2つのパラメーターは、前述の minVal および maxVal しきい値頻度の値です。

これら 2つの値を指定することは必須です。

指定された画像のエッジを分類した後、cv2.imshow() 関数を使用して新しいウィンドウに表示します。 cv2.waitkey(0) 関数は、インタープリターが作成されたウィンドウを自動的に閉じて、ユーザーが何らかのキーを押すのを待つのを防ぐために、例で使用されています。

cv2.destroyAllWindows() 関数はすべてのウィンドウを閉じます。

cv2.canny() 関数は、apertureSizeL2gradient という 2つの追加のオプション パラメータも受け入れます。 apertureSize パラメーターは、ソーベル カーネルのアパーチャのサイズを指定します。

デフォルトでは、その値は 3 で、3 から 5 の間の任意の奇数値を取ることができます。 apertureSize を大きくして、画像からより多くの機能を取得できます。

L2gradientTrue または False の値を取り、デフォルトは False です。

L2gradient パラメータを True として指定すると、新しい L2Gradient アルゴリズムを使用して勾配値が計算されます。 それ以外の場合は、従来の式が使用されます。 新しいアルゴリズムは、もう少し正確になる傾向があります。

まとめ

このチュートリアルでは、cv2.canny() 関数の使用方法について説明しました。 Canny Edge 検出アルゴリズムと、この関数がそれを内部に実装する方法について説明しました。

例を挙げて機能を説明しました。 この関数のパラメーターについても説明しました。

一部は必須の threshold1threshold2 でしたが、その他はオプションの apertureSizeL2gradient でした。

著者: Manav Narula
Manav Narula avatar Manav Narula avatar

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

関連記事 - Python OpenCV