簡體   English   中英

如何僅檢測圖像中的垂直邊緣?

[英]How to detect only vertical edges from the image?

我有以下圖像:

原圖:

原始圖像

我想檢測下圖中以紅色顯示的 3 個垂直邊緣:

所需的 output:

期望的輸出

我嘗試了以下方法:

#green is the original image
gray = cv2.cvtColor(green, cv2.COLOR_BGR2GRAY)
cv2.imshow("Gray green" ,gray)

ret, thresh1 = cv2.threshold(gray, 140, 255, cv2.THRESH_BINARY_INV)
cv2.imshow("140 Thresh", thresh1)

edges = cv2.Canny(thresh1,100,250,apertureSize = 7)
cv2.imshow("Edges", edges)

精明的邊緣檢測器顯示了這個 output:

精明的結果:

精明的結果

我嘗試使用sobel垂直檢測,如下所示:

 sobel_vertical = cv2.Sobel(thresh1, cv2.CV_64F, 1, 0, ksize=7)
 cv2.imshow("Vertical", sobel_vertical)

這是索貝爾垂直sobel

索貝爾立式 output

索貝爾垂直輸出

按照此

這個

作為答案,我嘗試了相同的代碼,如下所示:

minLineLength=100

lines = cv2.HoughLinesP(image=edges,rho=1.4,theta=np.pi/180, threshold=100,lines=np.array([]), minLineLength=minLineLength,maxLineGap=10)

a,b,c = lines.shape

for i in range(a):
    cv2.line(green, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (0, 0, 255), 1, cv2.LINE_AA)

cv2.imshow("Lines", green)

這給了我這個 output:

Houghlines output:

Houghlines 輸出

誰能向我建議我做錯了什么,或者我可以做些什么來獲得所需的 output 或接近那個? 我根本不希望檢測到水平邊緣。 謝謝!

對於從 Houghlines output 獲得的線,您可以計算每條線的斜率或傾角,並且您可以應用一個條件,即僅顯示斜率在給定范圍內的那些線,例如 0 到 90 度

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM