ホームページ  >  記事  >  バックエンド開発  >  Python を使用して写真上の形状をトレースする方法

Python を使用して写真上の形状をトレースする方法

PHPz
PHPzオリジナル
2023-08-18 19:57:23932ブラウズ

Python を使用して写真上の形状をトレースする方法

Python を使用して画像内の形状を追跡する方法

はじめに:
画像処理はコンピューター ビジョンの分野の重要な部分であり、画像内の特定の形状を追跡します。画像 追跡は一般的なタスクの 1 つです。この記事では、Python と OpenCV ライブラリを使用して画像内の形状を追跡する方法を紹介し、対応するコード例を示します。

1. 準備:
コードを書き始める前に、Python と OpenCV ライブラリをインストールし、入力としてターゲット形状を含む画像を準備する必要があります。まず、Python がインストールされていることを確認し、Python の公式 Web サイトからオペレーティング システムに適したバージョンをダウンロードしてインストールできます。次に、pip コマンドを使用して OpenCV ライブラリをインストールする必要があります。ターミナル (またはコマンド ライン) を開き、次のコマンドを入力して OpenCV をインストールします:

pip install opencv-python

2. ライブラリをインポートし、イメージを読み取ります:
正式に記述する前にコードを作成するには、まず対応するライブラリをインポートする必要があります。 Python には、使用する必要があるライブラリをインポートするための import ステートメントが用意されています。このタスクでは、cv2 ライブラリ (OpenCV ライブラリへの Python インターフェイス) をインポートする必要があります。さらに、配列操作をサポートするために numpy ライブラリをインポートする必要もあります。必要なライブラリをインポートするコードは次のとおりです。

import cv2
import numpy as np

次に、画像を読み取り、グレースケール画像に変換する必要があります。グレースケール イメージは処理が容易で、計算量を減らすことができます。将来の作業で元のイメージが変更される可能性があることを考慮して、コピーを使用してグレースケール イメージを保存できます。画像を読み取り、グレースケールに変換するコードは次のとおりです。

image = cv2.imread("input.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

3. 形状検出と追跡:
形状追跡を実行する前に、まず形状検出を実行する必要があります。 OpenCV は、画像内の輪郭を見つけるための関数 cv2.findContours() を提供します。この関数は、二値化された画像を入力として受け取り、画像内のすべての輪郭のリストを返します。形状検出のコード例を次に示します。 CHAIN_APPROX_SIMPLE)

次に、 cv2.estimatePolyDP() 関数を使用して輪郭を近似し、より滑らかにします。近似の程度は、この関数の 2 番目のパラメーターであるイプシロンの値を調整することで変更できます。イプシロン値が小さいと、より正確な近似値が生成されますが、イプシロン値が大きいと、より粗い近似値が生成されます。形状近似のコード例を次に示します。

epsilon = 0.04 * cv2.arcLength(contour, True)

estimate = cv2.estimatePolyDP(contour, epsilon, True)

最後に、 cv2.drawContours() 関数を使用して、検出された形状を元の画像上に描画できます。以下は等高線を描画するコード例です:

cv2.drawContours(image, [おおよそ], 0, (0, 255, 0), 2)

コードの説明:

上記のコード ret は、しきい値処理操作が成功したかどうかを示すために使用されるブール値です。 thresh は、輪郭検出に使用されるしきい値処理された画像です。 contours は、検出されたすべての輪郭を含むリストです。 hierarchyはアウトラインの階層情報です。イプシロンは輪郭を近似するために使用されるパラメータです。近似値は近似された輪郭です。最後に、 cv2.drawContours() 関数を使用して輪郭を描画します。

4. 表示と結果:
形状追跡が完了したら、結果の画像を表示し、新しいファイルとして保存できます。以下は、結果を表示および保存するためのコード例です。

cv2.imshow("Result", image)
cv2.waitKey(0)

cv2.destroyAllWindows()


cv2 .imwrite("output.jpg", image)

コードの説明:

上記のコードでは、結果画像を表示するために cv2.imshow() 関数が使用されています。 cv2.waitKey(0) は、画像ウィンドウを閉じる前にユーザーが任意のキーを押すのを待つために使用されます。 cv2.destroyAllWindows() 関数は、開いているウィンドウをすべて閉じるために使用されます。最後に、 cv2.imwrite() 関数を使用して、結果のイメージを保存します。

概要:
この記事では、Python と OpenCV ライブラリを使用して画像内の形状を追跡する方法を紹介します。最初に準備について学び、次に必要なライブラリをインポートしてイメージを読み込みました。次に、輪郭の近似と輪郭の描画により対象形状を追跡する形状検出・追跡を行いました。最後に、結果の画像を表示し、追跡結果を保存します。

完全なコード例は次のとおりです:

import cv2
import numpy as np

image = cv2.imread("input.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

ret, thresh = cv2.threshold(gray, 127, 255, 0)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for contour in contours:
    epsilon = 0.04 * cv2.arcLength(contour, True)
    approx = cv2.approxPolyDP(contour, epsilon, True)
    cv2.drawContours(image, [approx], 0, (0, 255, 0), 2)

cv2.imshow("Result", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite("output.jpg", image)

この記事が、Python と OpenCV ライブラリを使用して画像内の形状を追跡する方法を読者が理解するのに役立つことを願っています。この記事で提供されているコード例を学習して適用することで、読者は形状追跡タスクを簡単に実行し、画像処理アプリケーションで役割を果たすことができます。

以上がPython を使用して写真上の形状をトレースする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。