国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[圖解]cv2.HoughLines() 和 cv2.HoughLinesP()原理和代碼

這篇具有很好參考價(jià)值的文章主要介紹了[圖解]cv2.HoughLines() 和 cv2.HoughLinesP()原理和代碼。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

理論

[圖解]cv2.HoughLines() 和 cv2.HoughLinesP()原理和代碼

如上圖,左邊a,b固定可以確定一條直線(xiàn),線(xiàn)是() 組成的集合.

下面從xy空間變化到ab空間,此時(shí)給定一個(gè)綠點(diǎn)()可以確定一條綠色的線(xiàn),給定一個(gè)藍(lán)點(diǎn)?

()可以確定一條藍(lán)色的線(xiàn),綠線(xiàn)和藍(lán)線(xiàn)相交的點(diǎn)就是左邊確定紅線(xiàn)的參數(shù)a和b.此時(shí)xy空間里紅線(xiàn)上的其他點(diǎn),變換到ab空間必過(guò)藍(lán)綠線(xiàn)相交點(diǎn).

下面把a(bǔ)b換成rho和theta.

rho = x cos (theta) + y sin (theta)? 這里面rho?是原點(diǎn)到直線(xiàn)的垂直距離,和?theta是由這條垂直線(xiàn)和逆時(shí)針測(cè)量的水平軸形成的角度(該方向因您表示坐標(biāo)系的方式而異。OpenCV 中使用了這種表示)。檢查下面的圖像:

[圖解]cv2.HoughLines() 和 cv2.HoughLinesP()原理和代碼

所以如果線(xiàn)在原點(diǎn)以下通過(guò),它會(huì)有一個(gè)正的 rho 并且角度小于 180。如果它在原點(diǎn)之上,而不是取大于 180 的角度,而是取小于 180 的角度,并且 rho被取為陰性。任何垂直線(xiàn)將具有 0 度,水平線(xiàn)將具有 90 度。

現(xiàn)在讓我們看看霍夫變換如何處理線(xiàn)條。任何線(xiàn)都可以用這兩個(gè)術(shù)語(yǔ)表示,(rho, theta).?因此,首先創(chuàng)建一個(gè)二維數(shù)組或累加器(以保存兩個(gè)參數(shù)的值),并且最初設(shè)置為 0。讓行表示(rho)?和列表示?(theta).?數(shù)組的大小取決于您需要的精度。假設(shè)您希望角度精度為 1 度,您將需要 180 列。對(duì)于(rho),可能的最大距離是圖像的對(duì)角線(xiàn)長(zhǎng)度。所以取一像素精度,行數(shù)可以是圖像的對(duì)角線(xiàn)長(zhǎng)度。

考慮一個(gè) 100x100 的圖像,取一個(gè)點(diǎn)。你知道它的 (x,y) 值?,F(xiàn)在在線(xiàn)方程中,輸入值(theta = 0,1,2,....,180)?并檢查?(rho)你得到。對(duì)于每(rho,theta)?對(duì),您在相應(yīng)的累加器中將值增加 1 ,所以現(xiàn)在在累加器中,單元格 (50,90) = 1 以及其他一些單元格。

現(xiàn)在取直線(xiàn)上的第二個(gè)點(diǎn)。執(zhí)行與上述相同的操作。增加與您獲得的單元格相對(duì)應(yīng)的值。這樣,最后,(rho,theta)?單元格累積數(shù)越多,說(shuō)明過(guò)這條線(xiàn)的點(diǎn)越多,當(dāng)大于某一閾值的時(shí)候,我們說(shuō)這是我們要找的一條直線(xiàn).

OpenCV 中的霍夫變換

上面解釋的所有內(nèi)容都封裝在 OpenCV 函數(shù)cv2.HoughLines() 中。它只是返回一組(rho, theta)列表。rho以像素為單位測(cè)量,并且theta以弧度為單位。第一個(gè)參數(shù),輸入圖像應(yīng)該是一個(gè)二值圖像,所以在應(yīng)用霍夫變換之前應(yīng)用閾值或使用精明的邊緣檢測(cè)。第二個(gè)和第三個(gè)參數(shù)分別是rho?和theta的精度。第四個(gè)參數(shù)是閾值,這意味著它應(yīng)該被視為一條線(xiàn)的最低投票數(shù)。請(qǐng)記住,投票數(shù)取決于線(xiàn)上的點(diǎn)數(shù)。所以它可能代表了應(yīng)該檢測(cè)的最小線(xiàn)長(zhǎng)。

Python:
cv.HoughLines( image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]] ) -> lines

例子代碼:

import cv2
import numpy as np

img = cv2.imread('../data/sudoku.png')
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.imwrite('houghlines3.jpg',img)

[圖解]cv2.HoughLines() 和 cv2.HoughLinesP()原理和代碼

?概率霍夫變換

在霍夫變換中,您可以看到,即使對(duì)于具有兩個(gè)參數(shù)的行,也需要進(jìn)行大量計(jì)算。概率霍夫變換是我們看到的霍夫變換的優(yōu)化。它沒(méi)有考慮所有要點(diǎn)。相反,它只需要一個(gè)足以進(jìn)行線(xiàn)檢測(cè)的隨機(jī)點(diǎn)子集。只是我們必須降低閾值。請(qǐng)參見(jiàn)下圖,它比較了霍夫空間中的霍夫變換和概率霍夫變換。

[圖解]cv2.HoughLines() 和 cv2.HoughLinesP()原理和代碼

OpenCV 實(shí)現(xiàn)基于 Matas, J. 和 Galambos, C. 和 Kittler, JV?[55]使用漸進(jìn)式概率霍夫變換對(duì)線(xiàn)條進(jìn)行魯棒檢測(cè)。使用的函數(shù)是cv2.HoughLinesP()。它有兩個(gè)新參數(shù)。

  • minLineLength?- 線(xiàn)的最小長(zhǎng)度。比這短的線(xiàn)段被拒絕。
  • maxLineGap?- 線(xiàn)段之間的最大允許間隙,將它們視為一條線(xiàn)。

好處是,它直接返回線(xiàn)的兩個(gè)端點(diǎn)。在前面的例子中,你只得到線(xiàn)的參數(shù),你必須找到所有的點(diǎn)。在這里,一切都是直接而簡(jiǎn)單的。

示例代碼:

import cv2
import numpy as np

img = cv2.imread('../data/sudoku.png')
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.imwrite('houghlines5.jpg',img)

[圖解]cv2.HoughLines() 和 cv2.HoughLinesP()原理和代碼

參考英文鏈接:

https://vovkos.github.io/doxyrest-showcase/opencv/sphinxdoc/page_tutorial_py_houghlines.html文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-457351.html

到了這里,關(guān)于[圖解]cv2.HoughLines() 和 cv2.HoughLinesP()原理和代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python——使用cv2拼接圖片(含代碼)

    python——使用cv2拼接圖片(含代碼)

    很多時(shí)候我們需要把幾張圖片拼到一起,當(dāng)然可以使用PS之類(lèi)的軟件來(lái)處理,但是使用python更快并且能批量處理。 假設(shè)我們有三張圖片: ?? ?? ?使用代碼把他們橫向拼到一起: ?當(dāng)然也可以縱向: 直接上代碼,這里需要使用python的cv2模塊:

    2024年02月13日
    瀏覽(16)
  • 解決opencv / cv2 沒(méi)有代碼提示的問(wèn)題

    解決opencv / cv2 沒(méi)有代碼提示的問(wèn)題

    在pycharm中初次使用cv2這個(gè)包時(shí)一般會(huì)遇到?jīng)]有代碼提示的問(wèn)題。 直接 import cv2 ,在調(diào)用函數(shù)時(shí)是沒(méi)有代碼提示的。 有的文章說(shuō)應(yīng)該: from cv2 import cv2 as cv ,但是這樣有可能會(huì)報(bào)錯(cuò)說(shuō) 在__init__.py 中找不到引用cv2, 或者 import cv2.cv2 as cv ,報(bào)錯(cuò)為 沒(méi)有名為cv2的模塊 還有可能是

    2024年02月06日
    瀏覽(16)
  • opencv 進(jìn)階10-人臉識(shí)別原理說(shuō)明及示例-cv2.CascadeClassifier.detectMultiScale()

    opencv 進(jìn)階10-人臉識(shí)別原理說(shuō)明及示例-cv2.CascadeClassifier.detectMultiScale()

    人臉識(shí)別是指程序?qū)斎氲娜四槇D像進(jìn)行判斷,并識(shí)別出其對(duì)應(yīng)的人的過(guò)程。人臉識(shí)別程 序像我們?nèi)祟?lèi)一樣,“看到”一張人臉后就能夠分辨出這個(gè)人是家人、朋友還是明星。 當(dāng)然,要實(shí)現(xiàn)人臉識(shí)別,首先要判斷當(dāng)前圖像內(nèi)是否出現(xiàn)了人臉,也即人臉檢測(cè)。只有檢 測(cè)到圖像

    2024年02月09日
    瀏覽(90)
  • 【OpenCV】仿射變換中cv2.estimateAffine2D 的原理

    【OpenCV】仿射變換中cv2.estimateAffine2D 的原理

    目錄 一、介紹 二、仿射變換矩陣 (M) 1.M中六個(gè)元素的說(shuō)明 2.計(jì)算旋轉(zhuǎn)角度 3.M的計(jì)算過(guò)程 三、輸出狀態(tài) (inliers) 四、錯(cuò)切參數(shù) 1.錯(cuò)切參數(shù)的定義 2.錯(cuò)切參數(shù)例子 (1)水平錯(cuò)切 (2)垂直錯(cuò)切 ????????cv2.estimateAffine2D?是 OpenCV 庫(kù)中的一個(gè)函數(shù),用于估計(jì)兩個(gè)二維點(diǎn)集之間的

    2024年02月04日
    瀏覽(54)
  • Pycharm中opencv/cv2無(wú)代碼提示問(wèn)題

    Pycharm中opencv/cv2無(wú)代碼提示問(wèn)題

    在Pycharm中配置opencv環(huán)境是碰到這樣import cv2 后輸入cv2.后無(wú)代碼提示并且按住Ctrl + 鼠標(biāo)左鍵后無(wú)法進(jìn)入cv2函數(shù)的問(wèn)題。之后我在網(wǎng)上找了許多博客,也試了許多方法,經(jīng)過(guò)幾次試驗(yàn),發(fā)現(xiàn)在將cv2文件夾中的cv2.pyd文件放到cv2下的data文件夾中,即可解決問(wèn)題。原理如此篇文章所示

    2024年02月11日
    瀏覽(19)
  • PyCharm中python導(dǎo)入cv2函數(shù)報(bào)黃(標(biāo)黃)且沒(méi)有代碼提示【已解決√】

    PyCharm中python導(dǎo)入cv2函數(shù)報(bào)黃(標(biāo)黃)且沒(méi)有代碼提示【已解決√】

    PyCharm中python導(dǎo)入cv2函數(shù)一直標(biāo)黃,看著很不舒服 之前老版本(不記得具體版本了)按照這個(gè)教程弄好了:https://blog.csdn.net/qq_44878920/article/details/124755978 現(xiàn)在新版本的PyCharm(2022.3)竟然操作不太一樣,一時(shí)半伙兒沒(méi)反應(yīng)過(guò)來(lái)怎么設(shè)置,摸索了一會(huì)兒成功了,步驟如下(同樣適合

    2024年02月11日
    瀏覽(39)
  • opencv視頻截取每一幀并保存為圖片python代碼CV2實(shí)現(xiàn)練習(xí)

    當(dāng)涉及到視頻處理時(shí),Python中的OpenCV庫(kù)提供了強(qiáng)大的功能,可以方便地從視頻中截取每一幀并將其保存為圖片。這是一個(gè)很有趣的練習(xí),可以讓你更深入地了解圖像處理和多媒體操作。 使用OpenCV庫(kù),你可以輕松地讀取視頻文件,并在循環(huán)中逐幀讀取視頻的每一幀。隨后,你可

    2024年02月12日
    瀏覽(31)
  • opencv-python庫(kù) cv2 圖形繪制 cv2.line()cv2.rectangle()cv2.circle()cv2.ellipse()cv2.polylines()cv2.putText

    cv2.line() 是 OpenCV 中的一個(gè)函數(shù),用于在圖像上繪制直線(xiàn)。這個(gè)函數(shù)需要指定圖像、線(xiàn)的起點(diǎn)和終點(diǎn)坐標(biāo)、線(xiàn)的顏色、線(xiàn)的寬度以及線(xiàn)的類(lèi)型。 下面是 cv2.line() 函數(shù)的詳細(xì)參數(shù)說(shuō)明: 參數(shù)解釋?zhuān)?下面是一個(gè)使用 cv2.line() 繪制直線(xiàn)的簡(jiǎn)單示例: 在這個(gè)例子中,我們創(chuàng)建了一個(gè)

    2024年04月23日
    瀏覽(100)
  • 【cv2.imread】與【cv2.imdecode】用法

    對(duì)于路徑中含有中文的圖像,直接用cv2.imread讀取會(huì)報(bào)錯(cuò),上次看到有大佬使用cv2.imdecode就可以正常讀取,有點(diǎn)好奇,所以今天來(lái)記錄下二者用法和區(qū)別。 目錄 ?1.讀取圖像的兩種方式對(duì)比 ?2.保存圖像的兩種方式對(duì)比 ? cv2.imread正常讀取影像 運(yùn)行上述代碼,會(huì) 報(bào)錯(cuò)! cv2.imd

    2024年02月02日
    瀏覽(89)
  • CV2逐步學(xué)習(xí)-2:cv2.GaussianBlur()詳解

    CV2逐步學(xué)習(xí)-2:cv2.GaussianBlur()詳解

    目錄 高斯模糊GaussianBlur()中 參數(shù)詳解 1.1. 由參數(shù)解釋產(chǎn)生的 問(wèn)題 深入理解前的準(zhǔn)備: 高斯函數(shù)、圖像濾波處理及卷積核 解釋1.1的問(wèn)題 權(quán)重矩陣 、高斯模糊的流程 摘要 高斯濾波是一種 線(xiàn)性平滑濾波 高斯濾波是對(duì)整幅圖像進(jìn)行 加權(quán)平均的過(guò)程 ,每一個(gè)像素點(diǎn)的值都由其本

    2024年02月05日
    瀏覽(89)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包