python 用opencv實(shí)現(xiàn)霍夫線變換
霍夫變換是一種檢測(cè)任何形狀的流行技術(shù),可以檢測(cè)形狀,即使它被破壞或扭曲一點(diǎn)點(diǎn).
一條線可以表示成y = mx + c或參數(shù)形式,像ρ=xcosθ+ysinθ,其中ρ是從原點(diǎn)到直線的垂直距離,θ角是由這條垂線和水平軸以逆時(shí)針的方向形成的(這個(gè)方向取決于你如何表示坐標(biāo)系統(tǒng),這種表示法在OpenCV中使用)

OpenCV中的Hough變換
cv.HoughLines()
第一個(gè)參數(shù),輸入圖像應(yīng)該是一個(gè)二值圖像,因此在應(yīng)用hough變換之前應(yīng)用閾值或使用Canny邊緣檢測(cè).
第二和第三個(gè)參數(shù)分別是ρ和θ的精度.
第四個(gè)參數(shù)是閾值,這意味著它應(yīng)該被視為一條直線.
記住,選票的數(shù)量取決于直線上的點(diǎn)的數(shù)量,所以它表示應(yīng)該檢測(cè)到的最小長度.
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轉(zhuǎn)換中,你可以看到,即使對(duì)于一個(gè)有兩個(gè)參數(shù)的線,它也需要大量的計(jì)算.概率Hough變換是我們所見的Hough變換的一個(gè)優(yōu)化,它并沒有把所有的要點(diǎn)都考慮進(jìn)去,相反,它只需要一個(gè)隨機(jī)子集,對(duì)行檢測(cè)來說足夠.
cv2.HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]])
- minLineLength:最小長度的線。比這更短的線段被拒絕了。
- maxLineGap:最大限度允許線段之間的間隙把它們當(dāng)作一條線來對(duì)待
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()

以上就是python 用opencv實(shí)現(xiàn)霍夫線變換的詳細(xì)內(nèi)容,更多關(guān)于python 實(shí)現(xiàn)霍夫線變換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python OpenCV中的numpy與圖像類型轉(zhuǎn)換操作
- python opencv圖像處理(素描、懷舊、光照、流年、濾鏡 原理及實(shí)現(xiàn))
- python實(shí)現(xiàn)圖片,視頻人臉識(shí)別(opencv版)
- Python + opencv對(duì)拍照得到的圖片進(jìn)行背景去除的實(shí)現(xiàn)方法
- Python+OpenCV圖像處理——圖像二值化的實(shí)現(xiàn)
- Python+OpenCV圖像處理——實(shí)現(xiàn)輪廓發(fā)現(xiàn)
- Python+OpenCV圖像處理——實(shí)現(xiàn)直線檢測(cè)
- Python+OpenCV圖像處理—— 色彩空間轉(zhuǎn)換
- python 基于opencv 實(shí)現(xiàn)一個(gè)鼠標(biāo)繪圖小程序
相關(guān)文章
Python個(gè)人博客程序開發(fā)實(shí)例框架設(shè)計(jì)
這篇文章主要介紹了怎樣用Java來實(shí)現(xiàn)一個(gè)完整的個(gè)人博客系統(tǒng),我們通過實(shí)操上手的方式可以高效的鞏固所學(xué)的基礎(chǔ)知識(shí),感興趣的朋友一起來看看吧2022-12-12
Python中判斷input()輸入的數(shù)據(jù)的類型
在pyhton中,經(jīng)常會(huì)用到input()語句,但是input()語句輸入的內(nèi)容只能是字符串類型,而我們經(jīng)常要輸入int類型的數(shù)據(jù)等,這個(gè)時(shí)候就需要用到int()方法給輸入的內(nèi)容強(qiáng)制轉(zhuǎn)換,今天小編給大家介紹下Python中判斷input()輸入的數(shù)據(jù)的類型,感興趣的朋友跟隨小編一起看看吧2022-11-11
Python使用Quart作為web服務(wù)器的代碼實(shí)現(xiàn)
Quart 是一個(gè)異步的 Web 框架,它使用 ASGI 接口(Asynchronous Server Gateway Interface)而不是傳統(tǒng)的 WSGI,這使得 Quart 特別適合用于構(gòu)建需要處理大量并發(fā)連接的高性能 Web 應(yīng)用程序,本文給大家介紹了Python使用Quart作為web服務(wù)器的代碼實(shí)現(xiàn)2024-06-06
基于Python編寫一個(gè)刷題練習(xí)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何基于Python語言編寫一個(gè)簡(jiǎn)單的刷題練習(xí)系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-02-02
Python使用fastAPI如何實(shí)現(xiàn)一個(gè)流式傳輸接口
這篇文章主要介紹了Python使用fastAPI如何實(shí)現(xiàn)一個(gè)流式傳輸接口問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
python如何處理matlab的mat數(shù)據(jù)
這篇文章主要介紹了python如何處理matlab的mat數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05

