Python で OpenCV を使用した画像モーメント

Manav Narula 2023年1月30日
  1. Python の OpenCV を用いてモーメントを計算するために moments() 関数を使用する
  2. まとめ
Python で OpenCV を使用した画像モーメント

Python は、opencv ライブラリを使用してさまざまなコンピュータビジョンタスクを実行します。これらのタスクには、画像の読み取りと処理が非常に効率的に含まれます。

画像には多くの特性があります。opencv ライブラリは、輪郭を操作するための多くの関数を提供します。

輪郭は、画像内のオブジェクトの境界に沿った曲線とそれに関連する形状に関する情報を提供するのに役立ちます。輪郭のそのような特徴の 1つは、モーメントと呼ばれます。

画像の瞬間は、コンピュータビジョンの観点から定義されます。これは、特定の画像のピクセルの強度の加重平均として説明できます。

画像モーメントを使用して、面積、形状の方向、およびその重心に関する情報を見つけることができます。

このチュートリアルでは、Python で opencv を使用した画像の瞬間について説明します。

Python の OpenCV を用いてモーメントを計算するために moments() 関数を使用する

Python では、opencv ライブラリの moments() 関数を使用して画像モーメントを使用できます。ポリゴンの 3 次までのモーメントは、この関数を使用して計算され、配列でモーメントを返します。

指定された配列で返された値を使用して、形状の図心などのプロパティを計算できます。

同じ例を見てみましょう。

import cv2

i = cv2.imread("img6.jpg")
img_g = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
ret, img = cv2.threshold(img_g, 127, 255, 0)

M = cv2.moments(img)
X = int(M["m10"] / M["m00"])
Y = int(M["m01"] / M["m00"])

cv2.circle(i, (X, Y), 5, (255, 255, 255), -1)
cv2.imshow("Output", i)
cv2.waitKey(0)
cv2.destroyAllWindows()

出力:

Python で opencv を使用した画像の瞬間

上記の例では、moments() 関数を使用して計算された画像モーメントを使用して円の重心を見つけます。

まず、必要な画像を読み取ります。画像を必要な色空間に変換する cvtColor 関数を使用して、画像をグレースケールに変換します。

次に、この画像にしきい値処理手法を適用します。これは、ノイズに取り組み、極端な値でピクセルをフィルタリングするのに役立ちます。

threshold() 関数を使用して、関数内にしきい値を指定します。この場合、127 より大きいすべてのピクセルは 255 に変更され、12 未満のピクセルはゼロに設定されます。

次に、画像のモーメントを計算します。返された配列の値を使用して、円の図心の位置を見つけます。

重心は、circle() 関数を使用して元の画像にプロットされます。この関数は、図心の座標に小さな円を作成します。

最終出力が表示され、waitKey() および destroyAllWindows() 関数を使用して、ユーザーがキーを押すのを待ってから、出力ウィンドウを自動的に閉じます。

まとめ

このチュートリアルでは、コンピュータービジョンの分野での画像モーメントと、Python の opencv ライブラリを使用してモーメントを計算する方法について説明しました。これには、opencv ライブラリの moments() 関数を使用しました。

モーメントは配列で返され、形状の方向、面積、図心などの詳細を見つけるために使用できます。この例では、円の図心を計算します。

コードが示され、すべての行が説明されています。

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