摘要:比這更短的線段被拒絕了。最大限度允許線段之間的間隙把它們當作一條線來對待
Hough Line Transform
霍夫變換是一種檢測任何形狀的流行技術,可以檢測形狀,即使它被破壞或扭曲一點點.
一條線可以表示成y = mx + c或參數形式,像ρ=xcosθ+ysinθ,其中ρ是從原點到直線的垂直距離,θ角是由這條垂線和水平軸以逆時針的方向形成的(這個方向取決于你如何表示坐標系統,這種表示法在OpenCV中使用)
cv.HoughLines()
第一個參數,輸入圖像應該是一個二值圖像,因此在應用hough變換之前應用閾值或使用Canny邊緣檢測.
第二和第三個參數分別是ρ和θ的精度.
第四個參數是閾值,這意味著它應該被視為一條直線.
記住,選票的數量取決于直線上的點的數量,所以它表示應該檢測到的最小長度.
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread("img.jpg") gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) edges = cv2.Canny(gray,50,150,apertureSize = 3) 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(img,(x1,y1),(x2,y2),(0,0,255),2) cv2.imshow("show",img) cv2.waitKey()概率Hough變換
在hough轉換中,你可以看到,即使對于一個有兩個參數的線,它也需要大量的計算.概率Hough變換是我們所見的Hough變換的一個優化,它并沒有把所有的要點都考慮進去,相反,它只需要一個隨機子集,對行檢測來說足夠.
cv2.HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]])
minLineLength:最小長度的線。比這更短的線段被拒絕了。
maxLineGap:最大限度允許線段之間的間隙把它們當作一條線來對待
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread("img.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) edges = cv2.Canny(gray, 50, 150, apertureSize=3) lines = cv2.HoughLinesP(edges, 1, np.pi/180,100, minLineLength=100, maxLineGap=10) for line in lines: x1, y1, x2, y2 = line[0] cv2.line(img, (x1, y1), (x2, y2), (0,255,0), 2) cv2.imshow("show",img) cv2.waitKey()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/42057.html
摘要:它越小,就會發現越多的假圓與較大的累加器值相對應的圓,將首先返回最小半徑最大半徑 Hough Circle Transform cv2.HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]]) image:單通道灰度圖像 method: c...
閱讀 1476·2021-11-16 11:44
閱讀 3296·2021-09-29 09:43
閱讀 627·2019-08-30 10:52
閱讀 946·2019-08-29 11:01
閱讀 3264·2019-08-26 11:47
閱讀 2897·2019-08-23 12:18
閱讀 1369·2019-08-22 17:04
閱讀 2055·2019-08-21 17:04