opencv直線検出

直線検出は、エッジ検出の結果のバイナリ画像に対して検出する必要があり、グレー画像に対しては検出できません。

エッジ検出のバイナリ画像と結果画像はまだ異なります。

バイナリグラフの検出結果:

api:

cv.HoughLines(image、rho、theta、threshold、lines = None、srn = None、stn = None、min_theta = None、max_theta = None)

パラメーター:
最初のパラメーターはバイナリイメージであるため、Hough Before変換、2値化、またはキャニーエッジ検出が必要です。

 

opencvのHoughLinesP関数は、検出された線の終点を出力できる統計的確率ハフ線変換関数です。その関数のプロトタイプは次のとおりです。HoughLinesP(image、rho、theta、threshold [、lines [、minLineLength [、maxLineGap]] ])->行

imageパラメータは、エッジ検出の出力画像を表します。これは、シングルチャネルの8ビットバイナリ画像です。

rhoパラメーターは、パラメーターの極直径の解像度をピクセル値で表し、ここでは通常1ピクセルが使用されます。

シータパラメータは、パラメータの極角の分解能をラジアンで表し、ここでは1度が使用されます。通常、CV_PI / 180に設定されます。

しきい値パラメーターは、直線を検出するために必要な最小曲線交点を表します。

linesパラメータは、検出された線のパラメータペア、つまり線分の2つの端点の座標を格納するコンテナを表します。

minLineLengthパラメーターは、直線を形成できるポイントの最小数を示します。ポイントが不十分なラインは破棄されます。

maxLineGapパラメーターは、直線上にあると見なすことができる輝点の最大距離を表します。
 

デモ:

 

import cv2
import numpy as np
image=cv2.imread("erzhi.jpg")

start=time.time()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 120)
line = 100
minLineLength = 15
lines = cv2.HoughLinesP(edges, 1, np.pi / 90, 10, lines=line, minLineLength=minLineLength)
lines1 = lines[:, 0, :]
print(time.time()-start,lines.shape)
for x1, y1, x2, y2 in lines1:


    cv2.line(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.imshow("edges",edges)
cv2.imshow("lines",image)
cv2.waitKey()

おすすめ

転載: blog.csdn.net/jacke121/article/details/115213997