Python是一種功能強(qiáng)大的編程語言,在計(jì)算機(jī)視覺中,它可以用來實(shí)現(xiàn)多種算法。其中,霍夫直線就是一種非常常見的算法。霍夫直線是通過霍夫變換來檢測圖像中所有直線的算法,廣泛應(yīng)用于不同的領(lǐng)域,如圖像處理、車道線檢測和對(duì)象跟蹤等。
# 導(dǎo)入必要的庫 import cv2 import numpy as np # 讀取圖像并轉(zhuǎn)換為灰度圖像 img = cv2.imread('image.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 應(yīng)用邊緣檢測算法 edges = cv2.Canny(gray, 50, 150) # 應(yīng)用霍夫直線變換 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) # 顯示結(jié)果 cv2.imshow('image', img) cv2.waitKey(0) cv2.destroyAllWindows()
在這段代碼中,先利用cv2.imread()函數(shù)讀取圖像,并使用cv2.cvtColor()函數(shù)將其轉(zhuǎn)換為灰度圖像。然后,通過應(yīng)用邊緣檢測算法(這里使用的是Canny算法),得到一張只包含邊緣的圖像。接下來,使用cv2.HoughLines()函數(shù)對(duì)圖像進(jìn)行霍夫直線變換,檢測到所有的直線。最后,使用cv2.line()函數(shù)繪制檢測到的直線,并使用cv2.imshow()函數(shù)展示最終結(jié)果。
在實(shí)際應(yīng)用中,霍夫直線是一種非常有用的算法。例如,在自動(dòng)駕駛中,可以通過檢測車道線來實(shí)現(xiàn)車輛的自主行駛。此外,它還可以用于檢測圖像中其他幾何圖形,如圓和橢圓。