OpenCV しきい値
このチュートリアルでは、Python で cv2.threshold()
関数を使用して取り組みます。
しきい値処理手法
しきい値処理は、白黒画像で行われる画像処理技術であり、ノイズを除去し、極端な値を持つピクセルをフィルタリングするのに役立ちます。 ここでは、既存の画像を使用して、何らかのしきい値に基づいてピクセルの値を調整することにより、バイナリ画像を作成します。
すべてのピクセル値は、指定されたしきい値と比較されます。 値がしきい値未満の場合、0
に設定されます。 それ以外の場合は、最大 (255
) に設定されます。
Python で OpenCV ライブラリを使用して、コンピューター ビジョン技術用の画像を読み取って処理できます。 cv2.threshold()
関数を使用して、このライブラリでしきい値処理を実行できます。
OpenCV でのしきい値処理に cv.threshold()
関数を使用する
cv2.threshold()
関数は、Python で画像の基本的なバイナリしきい値処理手法を実装します。 指定されたしきい値との比較に基づいて、ピクセル値を 0 または最大値に置き換え、タプルとして処理された画像でしきい値を返します。
src
パラメータを使用して処理する画像を提供します。 比較のしきい値は、thresh
パラメータを使用して提供されます。
最大値は、maxval
パラメータを使用して指定できます。 これは、以下で説明するしきい値処理手法のタイプに応じて使用されます。
この関数に関連付けられている主なパラメーターは、type
パラメーターです。 これにより、使用するバイナリしきい値のタイプが決まります。
type
パラメータは 5つの値を受け入れることができます。 最初のタイプは cv2.THRESH_BINARY
です。これは、しきい値より小さい場合はピクセル値 0
を割り当て、大きい場合は 255
を割り当てることにより、バイナリしきい値処理の基本に従います。
例:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
r, t = cv2.threshold(img, 60, 255, cv2.THRESH_BINARY)
cv2.imshow("THRESH_BINARY", t)
cv2.waitKey(0)
cv2.destroyAllWindows()
出力:
上記の例では、cv2.imread()
関数を使用して画像を読み取ります。 次に、cv2.cvtColor()
関数を使用してグレースケール イメージに変換します。このプロセスは、他のタイプでも同じです。
次に、cv2.threshold()
関数を適用し、必要なパラメーターを提供します。 しきい値は 60
で、cv2.THRESH_BINARY
手法を適用します。 最終結果は、cv2.imshow()
関数を使用してウィンドウに表示されます。
cv2.waitKey()
および cv2.destroyAllWindows()
関数は、ウィンドウがすぐに閉じないようにし、ユーザーが任意のキーを押したときにウィンドウを閉じます。 他のタイプについて説明しましょう。
cv2.THRESH_BINARY_INV
型があり、前の型とは逆です。 しきい値よりも小さい場合はピクセルに最大値を割り当て、0
を割り当てます。
例:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
r, t = cv2.threshold(img, 60, 255, cv2.THRESH_BINARY_INV)
cv2.imshow("THRESH_BINARY_INV", t)
cv2.waitKey(0)
cv2.destroyAllWindows()
出力:
cv2.threshold()
関数でcv2.THRESH_BINARY_INV
タイプを使用して、しきい値処理技術を処理します。 手順は最後の手順と同様です。
3番目のタイプは、ピクセル値がしきい値を超えたときにしきい値として割り当てられる場合、cv2.THRESH_TRUNC
です。
しきい値より小さいピクセルはすべて同じままです。
例:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
r, t = cv2.threshold(img, 60, 255, cv2.THRESH_TRUNC)
cv2.imshow("THRESH_TRUNC", t)
cv2.waitKey(0)
cv2.destroyAllWindows()
出力:
Python で cv2.threshold()
関数を使用して cv2.THRESH_TRUNC
しきい値処理手法を実装します。
cv2.THRESH_TOZERO
タイプもあります。 しきい値未満のピクセル値はすべてゼロに変更されますが、残りのピクセル値は変更されません。
例:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
r, t = cv2.threshold(img, 60, 255, cv2.THRESH_TOZERO)
cv2.imshow("THRESH_TOZERO", t)
cv2.waitKey(0)
cv2.destroyAllWindows()
出力:
前のタイプの逆は cv2.THRESH_TOZERO_INV
タイプで、しきい値より大きいピクセル値はゼロに変更されます。 同様に使用できます。
例:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
r, t = cv2.threshold(img, 120, 255, cv2.THRESH_TOZERO_INV)
cv2.imshow("THRESH_TOZERO_INV", t)
cv2.waitKey(0)
cv2.destroyAllWindows()
出力:
まとめ
この記事では、cv2.threshold()
関数を使用して単純なしきい値処理を実装することについて説明しました。 しきい値処理は、あるしきい値と比較してピクセル値を変更する手法です。
cv2.threshold()
関数とそのパラメーターの使用方法について説明しました。 type
パラメーターに異なる値を使用すると、5 種類のしきい値処理が可能になります。
OpenCV ライブラリを使用して実現できる 適応しきい値処理 もあります。
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