OpenCV しきい値

Manav Narula 2023年6月21日
  1. しきい値処理手法
  2. OpenCV でのしきい値処理に cv.threshold() 関数を使用する
  3. まとめ
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.threshold を使用した THRESH_BINARY

上記の例では、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 を使用した THRESH_BINARY_INV

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()

出力:

cv2.threshold を使用した THRESH_TRUNC

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.threshold を使用した cv2.THRESH_TOZERO

前のタイプの逆は 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.THRESH_TOZERO_INV

まとめ

この記事では、cv2.threshold() 関数を使用して単純なしきい値処理を実装することについて説明しました。 しきい値処理は、あるしきい値と比較してピクセル値を変更する手法です。

cv2.threshold() 関数とそのパラメーターの使用方法について説明しました。 type パラメーターに異なる値を使用すると、5 種類のしきい値処理が可能になります。

OpenCV ライブラリを使用して実現できる 適応しきい値処理 もあります。

著者: 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