OpenCVを使用したPythonでの行検出?
この投稿では、ハフ変換と呼ばれる手法を使用して、画像内の線を検出する方法を学習します。
ハフ変換?
ハフ変換は、単純な形状を数学的な形式で表現できる場合に、その形状を検出するための特徴抽出方法です。少し壊れたり歪んだりしても、なんとか形を検出できます。ラインに対してどのように機能するかを見ていきます。
「単純な」形状とは、いくつかのパラメータで表現できる形状です。たとえば、線は2つのパラメータ(傾き、切片)のみで表すことができ、円には3つのパラメータ(中心の座標と半径(x、y、r))があります。
ハフ変換を使用して画像から線を検出する
線は方程式で表すことができます-またはパラメトリック形式で表すことができます。ここで、(ρ)は原点から線までの垂直距離であり、ϴはこの垂直線とカウンターで測定された水平軸によって形成される角度です。 -時計回り(この表現はOpenCVで使用されます)。下の画像を確認してください
したがって、線が原点の下を通過する場合、正のrhoと180未満の角度になります。原点より上にある場合、角度を180より大きくする代わりに、角度を180未満とし、rhoを負にします。垂直線は0度、水平線は90度になります。
アキュムレータ
任意の線は、これらの2つの項(ρ、ϴ)で表すことができます。したがって、最初に2D配列またはアキュムレータ(2つのパラメータの値を保持するため)を作成し、最初は0に設定されます。ここで、行はρを示し、列はϴを示します。アレイのサイズは、必要な精度によって異なります。たとえば、角度の精度を1度にする必要がある場合は、180列とρが必要です。可能な最大距離は画像の対角線の長さであり、ρは可能な最大距離です。画像の対角線の長さです。したがって、1ピクセルの精度と行数を取得すると、画像の対角線の長さになります。
中央に水平線がある100*100の画像があるとします。線の最初の点を取ると、その(x、y)値がわかります。ここで、方程式で、値ϴ =0,1,2,3…180をpuし、取得したρ値を確認します。すべての(ρ、ϴ)ペアについて、値を1つインクリメントすると、対応する(ρ、ϴ)セルのアキュムレータになります。したがって、アキュムレータでは、セル(50,90)=1と他のいくつかのセルがあります。次に、ラインの2番目のスポットを取ります。最初のスポットで行ったのと同じ手順を繰り返します。取得した(ρ、ϴ)に対応するセルの値をインクリメントします。今回は、セル(50,90)=2です。したがって、実際には(ρ、ϴ)の値に投票しています。ライン上のすべてのポイントでこのプロセスを続行します。各スポットで、セル(50,90)がインクリメントまたは投票されますが、他のセルは投票されない場合があります。このようにして、最後に、セル(50,90)の投票数が最大になります。したがって、アキュムレータで最大投票数を検索すると、値(50,90)が得られます。これは、この画像の原点から距離50度、角度90度に線があることを示しています。これが、線のハフ変換の仕組みです。
OpenCVでのハフ変換
上で説明したものはすべて、OpenCV関数cv2.HoughLines()にカプセル化されています。単純に(ρ、ϴ)値の配列を返します。ここで、ρはピクセルで測定され、ϴはラジアンで測定されます。
以下は、openCVとハフライン変換を使用したライン検出のプログラムです。
以下は駐車場の実際の画像です。この画像で、ハフライン変換とOpenCVライブラリを使用してライン検出を行います。
例
import cv2 import numpy as np img = cv2.imread("parkingLot1.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) edges = cv2.Canny(gray, 75, 150) lines = cv2.HoughLinesP(edges, 1, np.pi/180, 30, maxLineGap=250) for line in lines: x1, y1, x2, y2 = line[0] cv2.line(img, (x1, y1), (x2, y2), (0, 0, 128), 1) cv2.imshow("linesEdges", edges) cv2.imshow("linesDetected", img) cv2.waitKey(0) cv2.destroyAllWindows()
結果
そして検出された線-
-
PythonOpenCvモジュールを使用して画像に幾何学的形状を描画します
OpenCVの基本的な操作は、画像を描画することです。線、円、長方形などのさまざまな幾何学的形状を追加する機能。 多くの場合、画像分析を使用して、画像の一部を強調表示する必要があります。たとえば、その部分を定義する長方形を追加します。また、例として、何かを示す矢印。 cv2.line()-この関数は、画像に線を引くために使用されます。 cv2.rectangle()-この関数は、画像に長方形を描画するために使用されます。 cv2.circle()-この関数は、画像に円を描くために使用されます。 cv2.putText()-この関数は、画像にテキストを書き込むために使用されます。 c
-
PythonOpenCvを使用してリバースモードでビデオを再生する
OpenCvの完全な形式はオープンソースのコンピュータービジョンであり、このライブラリを使用して、画像やビデオに対してさまざまな操作を実行できます。 OpenCVのアプリケーション領域 顔認識システム モーショントラッキング 人工ニューラルネットワーク ディープニューラルネットワーク ビデオストリーミングなど Windowsにインストールする場合は、このコマンドラインを使用できます pip install opencv-python Linuxの場合- sudo apt-get install python-opencv タスクを完了するには、いくつかの手順に従う必要