Python を使用して画像にハフ変換を実行する方法
要約:
ハフ変換は、直線や特定の線を検出するために使用される一般的な画像処理技術です。形。この記事では、Python で OpenCV ライブラリを使用してハフ変換を実装する方法を紹介し、コード例を通じてその実装プロセスを詳しく説明します。
はじめに:
ハフ変換は、1962 年にハフによって提案された画像処理技術です。元々は画像内の直線を検出するために使用されていました。その後、ハフ変換は広く使用され、円、楕円、その他の形状を検出するために拡張されました。コンピューター ビジョンと画像処理の分野では、ハフ変換は非常に重要なツールです。
1. ハフ変換の原理
ハフ変換の基本原理は、画像内の各ピクセルを極座標 (ハフ空間) 空間 (またはパラメーター空間) の曲線に変換することです。直線の場合、2 つのパラメーターはそれぞれ直線の距離と角度を表します。パラメータ空間内の点を選択し、曲線上の交点を見つけることにより、元の画像内のすべての直線を取得できます。
2. OpenCV ライブラリの紹介
OpenCV は、豊富な画像処理アルゴリズムとコンピューター ビジョン アルゴリズムを提供するオープンソースのコンピューター ビジョンおよび機械学習ソフトウェア ライブラリです。これは、Python で最も人気のある画像処理ライブラリの 1 つであり、強力な画像処理機能と使いやすいインターフェイスを備えています。この記事では、OpenCV ライブラリを使用してハフ変換を実装します。
3. Python を使用してハフ変換を実行する
以下では、具体的な例を使用して、Python を使用して画像にハフ変換を実行する方法を示します。
まず、必要なライブラリをインポートする必要があります:
import cv2 import numpy as np import matplotlib.pyplot as plt
次に、元の画像を読み取って表示します:
image = cv2.imread("image.jpg") plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.show()
次に、画像をグレースケールに変換します:
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
次に、画像上でエッジ検出を実行します:
edges = cv2.Canny(gray, 50, 150)
次に、ハフ変換を実行します:
lines = cv2.HoughLines(edges, 1, np.pi/180, 200)
トラバースして、検出された直線を描画します:
for line in lines: rho, theta = line[0] a = np.cos(theta) b = np.sin(theta) x0 = a*rho y0 = b*rho x1 = int(x0 + 1000*(-b)) y1 = int(y0 + 1000*(a)) x2 = int(x0 - 1000*(-b)) y2 = int(y0 - 1000*(a)) cv2.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
最後に、処理された画像を表示します:
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.show()
結論:
この記事では、Python で OpenCV ライブラリを使用して画像にハフ変換を実行する方法について詳しく説明します。サンプル コードを通じて、直線を検出するハフ変換の強力な能力がわかります。直線に加えて、OpenCV は他の形状のハフ変換実装も提供しており、読者はさらに学習して試すことができます。
参考文献:
付録:
完全な詳細については、以下のコード ブロックを参照してください。コード :
import cv2 import numpy as np import matplotlib.pyplot as plt # 读取并显示原始图像 image = cv2.imread("image.jpg") plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.show() # 将图像转换为灰度图像 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 对图像进行边缘检测 edges = cv2.Canny(gray, 50, 150) # 进行霍夫变换 lines = cv2.HoughLines(edges, 1, np.pi/180, 200) # 遍历并绘制检测到的直线 for line in lines: rho, theta = line[0] a = np.cos(theta) b = np.sin(theta) x0 = a*rho y0 = b*rho x1 = int(x0 + 1000*(-b)) y1 = int(y0 + 1000*(a)) x2 = int(x0 - 1000*(-b)) y2 = int(y0 - 1000*(a)) cv2.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2) # 显示处理后的图像 plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.show()
注: コード内の "image.jpg"
を独自の画像パスに置き換えてください。
以上がPython を使用して画像にハフ変換を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。