python 用opencv實(shí)現(xiàn)霍夫線(xiàn)變換
霍夫變換是一種檢測(cè)任何形狀的流行技術(shù),可以檢測(cè)形狀,即使它被破壞或扭曲一點(diǎn)點(diǎn).
一條線(xiàn)可以表示成y = mx + c或參數(shù)形式,像ρ=xcosθ+ysinθ,其中ρ是從原點(diǎn)到直線(xiàn)的垂直距離,θ角是由這條垂線(xià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)該被視為一條直線(xiàn).
記住,選票的數(shù)量取決于直線(xiàn)上的點(diǎn)的數(shù)量,所以它表示應(yīng)該檢測(cè)到的最小長(zhǎng)度.
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ù)的線(xiàn),它也需要大量的計(jì)算.概率Hough變換是我們所見(jiàn)的Hough變換的一個(gè)優(yōu)化,它并沒(méi)有把所有的要點(diǎn)都考慮進(jìn)去,相反,它只需要一個(gè)隨機(jī)子集,對(duì)行檢測(cè)來(lái)說(shuō)足夠.
cv2.HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]])
- minLineLength:最小長(zhǎng)度的線(xiàn)。比這更短的線(xiàn)段被拒絕了。
- maxLineGap:最大限度允許線(xiàn)段之間的間隙把它們當(dāng)作一條線(xiàn)來(lái)對(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)霍夫線(xiàn)變換的詳細(xì)內(nèi)容,更多關(guān)于python 實(shí)現(xiàn)霍夫線(xiàn)變換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python OpenCV中的numpy與圖像類(lèi)型轉(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)直線(xiàn)檢測(cè)
- Python+OpenCV圖像處理—— 色彩空間轉(zhuǎn)換
- python 基于opencv 實(shí)現(xiàn)一個(gè)鼠標(biāo)繪圖小程序
相關(guān)文章
Python插件virtualenv搭建虛擬環(huán)境
這篇文章主要為大家詳細(xì)介紹了Python插件virtualenv搭建虛擬環(huán)境,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11出現(xiàn)module 'queue' has no attrib
這篇文章主要介紹了出現(xiàn)module 'queue' has no attribute 'Queue'問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04python3 selenium自動(dòng)化 下拉框定位的例子
今天小編就為大家分享一篇python3 selenium自動(dòng)化 下拉框定位的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08Win10系統(tǒng)下安裝編輯器之神(The?God?of?Editor)Vim并且構(gòu)建Python生態(tài)開(kāi)發(fā)環(huán)境過(guò)程(2
這篇文章主要介紹了Win10系統(tǒng)下安裝編輯器之神(The?God?of?Editor)Vim并且構(gòu)建Python生態(tài)開(kāi)發(fā)環(huán)境(2020年最新攻略),本次我們?cè)赪in10平臺(tái)構(gòu)建一套以Vim為核心的Python開(kāi)發(fā)環(huán)境,需要的朋友可以參考下2023-01-01Python數(shù)據(jù)類(lèi)型詳解(一)字符串
簡(jiǎn)單的說(shuō)字符串String就是使用引號(hào)定義的一組可以包含數(shù)字,字母,符號(hào)(非特殊系統(tǒng)符號(hào))的集合。今天我們就來(lái)詳細(xì)探討下Python數(shù)據(jù)類(lèi)型中的字符串2016-05-05利用Python實(shí)時(shí)獲取steam特惠游戲數(shù)據(jù)
Steam是由美國(guó)電子游戲商Valve于2003年9月12日推出的數(shù)字發(fā)行平臺(tái),被認(rèn)為是計(jì)算機(jī)游戲界最大的數(shù)碼發(fā)行平臺(tái)之一。本文將利用Python實(shí)時(shí)獲取steam特惠游戲數(shù)據(jù),感興趣的可以嘗試一下2022-06-06