[英]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:
誰能向我建議我做錯了什么,或者我可以做些什么來獲得所需的 output 或接近那個? 我根本不希望檢測到水平邊緣。 謝謝!
對於從 Houghlines output 獲得的線,您可以計算每條線的斜率或傾角,並且您可以應用一個條件,即僅顯示斜率在給定范圍內的那些線,例如 0 到 90 度
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.