opencv 霍夫曼變換 直線提取

2021-09-12 21:55:27 字數 1275 閱讀 9930

import cv2

import numpy as np

img = cv2.imread("hd.jpeg", 0)

img = cv2.gaussianblur(img,(3,3),0)

edges = cv2.canny(img, 50, 150, aperturesize = 3)

lines = cv2.houghlines(edges,1,np.pi/10,118) #這裡對最後乙個引數使用了經驗型的值

result = img.copy()

for m in range(lines.ndim):

for line in lines[m]:

rho = line[0] #第乙個元素是距離rho

theta= line[1] #第二個元素是角度theta

# print rho

# print theta

if (theta < (np.pi/4. )) or (theta > (3.*np.pi/4.0)): #垂直直線

#該直線與第一行的交點

pt1 = (int(rho/np.cos(theta)),0)

#該直線與最後一行的焦點

pt2 = (int((rho-result.shape[0]*np.sin(theta))/np.cos(theta)),result.shape[0])

#繪製一條白線

cv2.line( result, pt1, pt2, (255))

else: #水平直線

# 該直線與第一列的交點

pt1 = (0,int(rho/np.sin(theta)))

#該直線與最後一列的交點

pt2 = (result.shape[1], int((rho-result.shape[1]*np.cos(theta))/np.sin(theta)))

#繪製一條直線

Opencv 霍夫變換 直線

注意 下面的解釋屬於bradski和kaehler 的 學習opencv 一書。hough line變換是用於檢測直線的變換。為了應用變換,首先需要邊緣檢測預處理。如你所知,影象空間中的一行可以用兩個變數表示。例如 在笛卡爾座標系中 引數 m,b 在極座標系中 引數 r,對於hough 變換,我們將...

Hough變換提取直線 Matlab實現

用hough變換提取直線 在對圖形進行直線檢測之前,需要對圖形進行邊緣檢測 二值化處理,用拉普拉斯演算法或canny提取邊緣 hough變換思想 1 在 的極值範圍內對其分別進行 m,n 等分,設乙個二維陣列的下標與 i j 的取值 對應 2 對影象上的所有邊緣點作 hough 變換,求每個點在 j...

OpenCV學習筆記(三) 直線提取

首先熟悉opencv中的直線檢測的函式。我在數字影象處理課程中學習到的直線檢測的方法是hough變換,因此此處也使用hough相關的函式進行直線檢測與提取。1 houghlines 函式原型 2 houghlinesp 函式原型 void cv houghlinesp inputarray imag...