目錄題目
解決方法
完整**
hough引數詳解 總結
參考用霍夫變換找出影象中的直線和圓(用彩色直線和圓標記在原圖上)。要求有**,有注釋,有過程、有結果
# 1.載入,轉為二值圖
gray = cv2.cvtcolor(img, cv2.color_bgr2gray) # 由於canny只能處理灰度圖,所以將讀取的影象轉成灰度圖。
gray = cv2.gaussianblur(gray, (3, 3), 0) # 用高斯平滑處理原影象降噪。
# 2.1.霍夫直線變換
lines = cv2.houghlinesp(edges, 1, np.pi / 180, 25, minlinelength=19, maxlinegap=17)
'''rho: 線段以畫素為單位的距離精度,推薦用1.0
minlinelength:表示直線長度的閾值,超過設定閾值才被檢測出線段,值越大,基本上意味著檢出的線段越長,檢出的線段個數越少
maxlinegap:同一方向上兩條線段判定為一條線段的最大允許間隔(斷裂),小於了設定值,則把兩條線段當成一條線段
返回值為直線的起點和終點。
'''# 2.2.霍夫圓變換
circles = cv2.houghcircles(edges, cv2.hough_gradient, 1, 100, param2=30)
circles = np.int0(np.around(circles))
# 3.將檢測到的畫出來
lines1 = lines[:, 0, :] # 提取為二維
for x1, y1, x2, y2 in lines1[:]:
cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
for i in circles[0, :]:
cv2.circle(img, (i[0], i[1]), i[2], (0, 0, 255), 2) # 畫出外圓
# cv2.circle(img, (i[0], i[1]), 2, (0, 255, 0), 3) # 畫出圓心
# 1.載入,轉為二值圖
gray = cv2.cvtcolor(img, cv2.color_bgr2gray) # 由於canny只能處理灰度圖,所以將讀取的影象轉成灰度圖。
cv2.imshow('gray', gray)
gray = cv2.gaussianblur(gray, (3, 3), 0) # 用高斯平滑處理原影象降噪。
cv2.imshow('gaussian smoothing', gray)
edges = cv2.canny(gray, 70, 220)
cv2.imshow('edges', edges)
# 2.1.霍夫直線變換
lines = cv2.houghlinesp(edges, 1, np.pi / 180, 25, minlinelength=19, maxlinegap=17)
'''rho: 線段以畫素為單位的距離精度,推薦用1.0
minlinelength:表示直線長度的閾值,超過設定閾值才被檢測出線段,值越大,基本上意味著檢出的線段越長,檢出的線段個數越少
maxlinegap:同一方向上兩條線段判定為一條線段的最大允許間隔(斷裂),小於了設定值,則把兩條線段當成一條線段
返回值為直線的起點和終點。
'''
# 2.2.霍夫圓變換
circles = cv2.houghcircles(edges, cv2.hough_gradient, 1, 100, param2=30)
circles = np.int0(np.around(circles))
# 3.將檢測到的畫出來
lines1 = lines[:, 0, :] # 提取為二維
for x1, y1, x2, y2 in lines1[:]:
cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
for i in circles[0, :]:
cv2.circle(img, (i[0], i[1]), i[2], (0, 0, 255), 2) # 畫出外圓
# cv2.circle(img, (i[0], i[1]), 2, (0, 255, 0), 3) # 畫出圓心
cv2.imshow('result', img)
cv2.waitkey(0)
cv2.houghcircles(image,method,dp,mindist[, circles[,param1, param2[,minradius[,maxradius]]]]])
其返回n個圓的資訊儲存在1×n×的ndarray。
image不用多說,輸入矩陣
methodcv2.hough_gradient 也就是霍夫圓檢測,梯度法
dp計數器的解析度影象畫素解析度與引數空間解析度的比值(官方文件上寫的是影象解析度與累加器解析度的比值,它把引數空間認為是乙個累加器,畢竟裡面儲存的都是經過的畫素點的數量),dp=1,則引數空間與影象畫素空間(解析度)一樣大,dp=2,引數空間的解析度只有畫素空間的一半大
mindist圓心之間最小距離,如果距離太小,會產生很多相交的圓,如果距離太大,則會漏掉正確的圓
param1canny檢測的雙閾值中的高閾值,低閾值是它的一半(如果你的圓找不到,可以將該引數變小點)
param2最小投票數(基於圓心的投票數)
minradius需要檢測院的最小半徑
maxradius需要檢測院的最大半徑
我對hough變換的理解:你的圓一定要非常明顯,通過影象處理的方式將圓的邊界變得足夠清晰,然後使用hough變換才有效。
Hough變換檢測直線和圓
1 直線是如何表示的?對於平面中的一條直線,在直角座標系中,常見的有點斜式,兩點式兩種表示方法。然而在hough變換中,考慮的是另外一種表示方式 使用極座標 r,theta 來表示一條直線。其中r為該直線到原點的距離,theta為該直線的垂線與x軸的夾角。如下圖所示。2 如果座標系中有多個點,又怎樣...
Hough 變換檢測直線
hough 變換檢測直線的基本原理是 對x y 座標系下的每一點 x,y 對應極座標下為 rho x cos theta y sin theta 1 因此,對x y平面內的每一點,對應到極座標系則為一條直線,如果直角座標系下的點共線,則在極座標的直線會相交於一點。因此,求得極座標下相交最多的點,rh...
Hough變換檢測直線
1 基本原理 hough變換是影象處理中從影象中識別幾何形狀的基本方法之一,即它可以檢測已知形狀的目標,而且受雜訊和曲線間斷的影響小。hough變換的基本思想是利用點 線的對偶性。如下圖1所示 從圖1中可看出,x y座標和k b座標有點 線的對偶性。x y座標中的點p1 p2對應於k b座標中的l1...