Python を使用して写真の形状認識を実行する方法
コンピューター ビジョンの急速な発展に伴い、人々はコンピューター プログラムを使用して自動的に分析することにますます注目を集めています。そして画像を加工します。中でも画像中の物体の形状認識は重要な技術です。この記事では、Python プログラミング言語と OpenCV ライブラリを使用して画像内の形状を認識する方法をサンプルコード付きで紹介します。
Python は学びやすく使いやすいプログラミング言語であり、OpenCV はコンピュータ ビジョンの分野で広く使用されているオープンソース ライブラリであり、一連の画像処理および画像認識機能を提供します。 。
まず、Python および OpenCV ライブラリをインストールする必要があります。次のコマンドを使用して Windows 環境にインストールできます:
pip install opencv-python
次に、サンプル コードを 4 つのステップに分割します。画像、画像処理、形状検出、形状認識。
ステップ 1: 画像をロードする
処理を開始する前に、処理する画像をロードする必要があります。 OpenCV の imread()
関数を使用して画像ファイルを読み取ることができます:
import cv2 # 加载图像 image = cv2.imread('image.jpg')
ステップ 2: 画像処理
画像内の形状をより正確に検出するために、いくつかの画像処理操作を行う必要があります。まず、カラー画像をグレースケール画像に変換します:
# 转换为灰度图像 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
次に、グレースケール画像を 2 値化し、白黒画像に変換します:
# 二值化处理 ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
ステップ 3 :形状検出
次に、OpenCV の findContours()
関数を使用して、画像内のすべての輪郭を検出します。輪郭は、オブジェクトのエッジを表す一連の連続した点によって形成される曲線です。
# 查找图像中的轮廓 contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
ステップ 4: 形状認識
最後に、検出された輪郭を通じて画像内の形状を識別できます。この例では、検出された輪郭を事前定義された形状と照合し、形状タイプを決定します。
for contour in contours: # 计算轮廓的周长 perimeter = cv2.arcLength(contour, True) # 仅检测周长大于一定阈值的形状 if perimeter > 50: # 进行多边形拟合 approx = cv2.approxPolyDP(contour, 0.04 * perimeter, True) # 根据拟合出的多边形边数判断形状类型 sides = len(approx) if sides == 3: shape = "三角形" elif sides == 4: shape = "四边形" elif sides == 5: shape = "五边形" else: shape = "其他" # 在图像上标记出形状 cv2.drawContours(image, [approx], -1, (0, 255, 0), 2) cv2.putText(image, shape, (approx.ravel()[0], approx.ravel()[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 2)
最後に、imshow()
関数と waitKey()
関数を使用して結果の画像を表示し、ウィンドウの表示を維持するためにキーボード入力を待機します。 :
# 显示结果图像 cv2.imshow("Shapes", image) cv2.waitKey(0)
概要
この記事では、Python と OpenCV ライブラリを使用して画像の形状認識を実行する方法を紹介します。画像読み込み、画像処理、形状検出、形状認識の4つのステップにより、簡単なコードを書くだけで画像内の形状認識を実現できます。この方法は、コンピューター ビジョンや画像処理に携わる開発者にとって非常に役立ち、産業オートメーション、ロボット ビジョン、インテリジェント監視などのさまざまなシナリオに適用できます。
コード例:
import cv2 # 加载图像 image = cv2.imread('image.jpg') # 转换为灰度图像 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 二值化处理 ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) # 查找图像中的轮廓 contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for contour in contours: perimeter = cv2.arcLength(contour, True) if perimeter > 50: approx = cv2.approxPolyDP(contour, 0.04 * perimeter, True) sides = len(approx) if sides == 3: shape = "三角形" elif sides == 4: shape = "四边形" elif sides == 5: shape = "五边形" else: shape = "其他" cv2.drawContours(image, [approx], -1, (0, 255, 0), 2) cv2.putText(image, shape, (approx.ravel()[0], approx.ravel()[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 2) cv2.imshow("Shapes", image) cv2.waitKey(0)
この記事が、画像形状認識に Python と OpenCV を使用する方法をさらに理解するのに役立つことを願っています。これらのテクノロジーを深く学び、探求することで、独自のプロジェクトに適用して、より多くの機能やアプリケーションを実現できます。
以上がPython を使用して画像の形状認識を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。