欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

OpenCV實(shí)現(xiàn)霍夫變換直線檢測(cè)

 更新時(shí)間:2021年06月23日 10:47:24   作者:我有一個(gè)夢(mèng)想  
這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)霍夫變換直線檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

霍夫變換(Hough Transform)是圖像處理中檢測(cè)是否存在直線的重要算法,該算法是由Paul Hough在1962年首次提出,最開(kāi)始只能檢測(cè)圖像中的直線,但是霍夫變換經(jīng)過(guò)不斷的擴(kuò)展和完善已經(jīng)可以檢測(cè)多種規(guī)則形狀,例如圓形、橢圓等。霍夫變換通過(guò)將圖像中的像素在一個(gè)空間坐標(biāo)系中變換到另一個(gè)坐標(biāo)空間坐標(biāo)系中,使得在原空間中具有形同特性的曲線或者直線映射到另一個(gè)空間中形成峰值,從而把檢測(cè)任意形狀的問(wèn)題轉(zhuǎn)化為統(tǒng)計(jì)峰值的問(wèn)題。

霍夫變換通過(guò)構(gòu)建檢測(cè)形狀的數(shù)學(xué)解析式將圖像中像素點(diǎn)映射到參數(shù)空間中,例如我們想檢測(cè)兩個(gè)像素點(diǎn)所在的直線,需要構(gòu)建直線的數(shù)學(xué)解析式。在圖像空間x-y直角坐標(biāo)系中,對(duì)于直線可以用式(7.1)所示的解析式來(lái)表示。

其中k是直線的斜率,b是直線的截距。假設(shè)圖像中存在一像素點(diǎn)A(x0,y0),所有經(jīng)過(guò)這個(gè)像素點(diǎn)直線可以用式表示。

在圖像空間x-y直角坐標(biāo)系中,由于變量是x和y,因此式表示的是經(jīng)過(guò)點(diǎn)像素點(diǎn)A(x0,y0)的直線,但是經(jīng)過(guò)一點(diǎn)的直線有無(wú)數(shù)條,因此式中的 和 具有無(wú)數(shù)個(gè)可以選擇的值,如果將x0和y0看作是變量, k和 b表示定值,那么式可以表示在k-b空間的一條直線,映射過(guò)程示意圖如圖所示。用式的形式表示映射的結(jié)果如式所示,即霍夫變換將x-y直角坐標(biāo)系中經(jīng)過(guò)一點(diǎn)的所有直線映射成了k-b空間中的一條直線,直線上的每個(gè)點(diǎn)都對(duì)應(yīng)著x-y直角坐標(biāo)系中的一條直線。

當(dāng)圖像中存在另一個(gè)像素點(diǎn)B(x1,y1)時(shí),在圖像空間x-y直角坐標(biāo)系中所有經(jīng)過(guò)像素點(diǎn)B(x1,y1)的直線也會(huì)在參數(shù)空間中映射出一條直線。由于參數(shù)空間中每一個(gè)點(diǎn)都表示圖像空間x-y直角坐標(biāo)系中直線的斜率和截距,因此如果有一條直線經(jīng)過(guò)像素點(diǎn)A(x0,y0)和像素點(diǎn)B(x1,y1)時(shí),這條直線所映射在參數(shù)空間中的坐標(biāo)點(diǎn)應(yīng)該既在像素點(diǎn)A(x0,y0)映射的直線上又在像素點(diǎn)B(x1,y1)映射的直線上。在平面內(nèi)一個(gè)點(diǎn)同時(shí)在兩條直線上,那么這個(gè)點(diǎn)一定是兩條直線的交點(diǎn),因此這條同時(shí)經(jīng)過(guò)A(x0,y0)和B(x1,y1)的直線所對(duì)應(yīng)的斜率和截距就是參數(shù)空間中兩條直線的交點(diǎn)。

根據(jù)前面的分析可以得到霍夫變換中存在兩個(gè)重要的結(jié)論:(1)圖像空間中的每條直線在參數(shù)空間中都對(duì)應(yīng)著單獨(dú)一個(gè)點(diǎn)來(lái)表示;(2)圖像空間中的直線上任何像素點(diǎn)在參數(shù)空間對(duì)應(yīng)的直線相交于同一個(gè)點(diǎn)。圖給出了第二條結(jié)論的示意圖。因此通過(guò)霍夫變換尋找圖像中的直線就是尋找參數(shù)空間中大量直線相交的一點(diǎn)。

利用式形式進(jìn)行霍夫變換可以尋找到圖像中絕大多數(shù)直線,但是當(dāng)圖像中存在垂直直線時(shí),即所有的像素點(diǎn)的x坐標(biāo)相同時(shí),直線上的像素點(diǎn)利用上述霍夫變換方法得到的參數(shù)空間中多條直線互相平行,無(wú)法相交于一點(diǎn)。例如在圖像上存在3個(gè)像素點(diǎn)(2,1)、(2,2)和(2,3) ,利用式可以求得參數(shù)空間中3條直線解析式如式中所示,這些直線具有相同的斜率,因此無(wú)法交于一點(diǎn),具體形式如圖所示。

為了解決垂直直線在參數(shù)空間沒(méi)有交點(diǎn)的問(wèn)題,一般采用極坐標(biāo)方式表示圖像空間x-y直角坐標(biāo)系中的直線,具體形式如式(7.5)所示。

其中 r為坐標(biāo)原點(diǎn)到直線的距離, Θ為坐標(biāo)原點(diǎn)到直線的垂線與x軸的夾角,這兩個(gè)參數(shù)的含義如圖所示。

根據(jù)霍夫變換原理,利用極坐標(biāo)形式表示直線時(shí),在圖像空間中經(jīng)過(guò)某一點(diǎn)的所有直線映射到參數(shù)空間中是一個(gè)正弦曲線。圖像空間中直線上的兩個(gè)點(diǎn)在參數(shù)空間中映射的兩條正弦曲線相交于一點(diǎn),圖中給出了用極坐標(biāo)形式表示直線的霍夫變換的示意圖。

通過(guò)上述的變換過(guò)程,將圖像中的直線檢測(cè)轉(zhuǎn)換成了在參數(shù)空間中尋找某個(gè)點(diǎn) 通過(guò)的正線曲線最多的問(wèn)題。由于在參數(shù)空間內(nèi)的曲線是連續(xù)的,而在實(shí)際情況中圖像的像素是離散的,因此我們需要將參數(shù)空間的r軸和Θ軸進(jìn)行離散化,用離散后的方格表示每一條正弦曲線。首先尋找符合條件的網(wǎng)格,之后尋找該網(wǎng)格對(duì)應(yīng)的圖像空間中所有的點(diǎn),這些點(diǎn)共同組成了原圖像中的直線。

總結(jié)上面所有的原理和步驟,霍夫變換算法檢測(cè)圖像中的直線主要分為4個(gè)步驟:

霍夫檢測(cè)具有抗干擾能力強(qiáng),對(duì)圖像中直線的殘缺部分、噪聲以及其它共存的非直線結(jié)構(gòu)不敏感,能容忍特征邊界描述中的間隙,并且相對(duì)不受圖像噪聲影響等優(yōu)點(diǎn),但是霍夫變換的時(shí)間復(fù)雜度和空間復(fù)雜度都很高,并且檢測(cè)精度受參數(shù)離散間隔制約。離散間隔較大時(shí)會(huì)降低檢測(cè)精度,離散間隔較小時(shí)雖然能提高精度,但是會(huì)增加計(jì)算負(fù)擔(dān),導(dǎo)致計(jì)算時(shí)間邊長(zhǎng)。

標(biāo)準(zhǔn)霍夫變換

void HoughLines( InputArray image, OutputArray lines,
                              double rho, double theta, int threshold,
                              double srn = 0, double stn = 0,
                              double min_theta = 0, double max_theta = CV_PI );
  • image:待檢測(cè)直線的原圖像,必須是CV_8U的單通道二值圖像。
  • lines:霍夫變換檢測(cè)到的直線輸出量,每一條直線都由兩個(gè)參數(shù)表示,分別表示直線距離坐標(biāo)原點(diǎn)的距離 和坐標(biāo)原點(diǎn)到直線的垂線與x軸的夾角 。
  • rho:以像素為單位的距離分辨率,即距離 離散化時(shí)的單位長(zhǎng)度。
  • theta:以弧度為單位的角度分辨率,即夾角 離散化時(shí)的單位角度。
  • threshold:累加器的閾值,即參數(shù)空間中離散化后每個(gè)方格被通過(guò)的累計(jì)次數(shù)大于該閾值時(shí)將被識(shí)別為直線,否則不被識(shí)別為直線。
  • srn:對(duì)于多尺度霍夫變換算法中,該參數(shù)表示距離分辨率的除數(shù),粗略的累加器距離分辨率是第三個(gè)參數(shù)rho,精確的累加器分辨率是rho/srn。這個(gè)參數(shù)必須是非負(fù)數(shù),默認(rèn)參數(shù)為0。
  • stn:對(duì)于多尺度霍夫變換算法中,該參數(shù)表示角度分辨率的除數(shù),粗略的累加器距離分辨率是第四個(gè)參數(shù)rho,精確的累加器分辨率是rho/stn。這個(gè)參數(shù)必須是非負(fù)數(shù),默認(rèn)參數(shù)為0。當(dāng)這個(gè)參數(shù)與第六個(gè)參數(shù)srn同時(shí)為0時(shí),此函數(shù)表示的是標(biāo)準(zhǔn)霍夫變換。
  • min_theta:檢測(cè)直線的最小角度,默認(rèn)參數(shù)為0。
  • max_theta:檢測(cè)直線的最大角度,默認(rèn)參數(shù)為CV_PI,是OpenCV

4中的默認(rèn)數(shù)值具體為3.1415926535897932384626433832795。

該函數(shù)用于尋找圖像中的直線,并以極坐標(biāo)的形式將圖像中直線的極坐標(biāo)參數(shù)輸出。該函數(shù)的第一個(gè)參數(shù)為輸入圖像,必須是CV_8U的單通道二值圖像,如果需要檢測(cè)彩色圖像或者灰度圖像中是否存在直線,可以通過(guò)Canny()函數(shù)計(jì)算圖像的邊緣,并將邊緣檢測(cè)結(jié)果二值化后的圖像作為輸入圖像賦值給該參數(shù)。函數(shù)的第二個(gè)參數(shù)是霍夫變換檢測(cè)到的圖像中直線極坐標(biāo)描述的系數(shù),是一個(gè)N×2的vector矩陣,每一行中的第一個(gè)元素是直線距離坐標(biāo)原點(diǎn)的距離,第二個(gè)元素是該直線過(guò)坐標(biāo)原點(diǎn)的垂線與x軸的夾角,這里需要注意的是圖像中的坐標(biāo)原點(diǎn)在圖像的左上角。函數(shù)第三個(gè)和第四個(gè)參數(shù)是霍夫變換中對(duì)參數(shù)空間坐標(biāo)軸進(jìn)行離散化后單位長(zhǎng)度,這兩個(gè)參數(shù)的大小直接影響到檢測(cè)圖像中直線的精度,數(shù)值越小精度越高。第三個(gè)參數(shù)表示參數(shù)空間 軸的單位長(zhǎng)度,單位為像素,該參數(shù)常設(shè)置為1;第四個(gè)參數(shù)表示參數(shù)空間 軸的單位長(zhǎng)度,單位為弧度,該函數(shù)常設(shè)置為CV_PI/180。函數(shù)第五個(gè)參數(shù)是累加器的閾值,表示參數(shù)空間中某個(gè)方格是否被認(rèn)定為直線的判定標(biāo)準(zhǔn),這個(gè)數(shù)值越大,對(duì)應(yīng)在原圖像中構(gòu)成直線的像素點(diǎn)越多,反之則越少。第六個(gè)和第七個(gè)參數(shù)起到選擇標(biāo)準(zhǔn)霍夫變換和多尺度霍夫變換的作用,當(dāng)兩個(gè)參數(shù)全為0時(shí),該函數(shù)使用標(biāo)準(zhǔn)霍夫變換算法,否則該函數(shù)使用多尺度霍夫變換算法,當(dāng)函數(shù)使用多尺度霍夫變換算法時(shí),這兩個(gè)函數(shù)分別表示第三個(gè)參數(shù)單位距離長(zhǎng)度的除數(shù)和第四個(gè)參數(shù)角度單位角度的除數(shù)。函數(shù)最后兩個(gè)參數(shù)是檢測(cè)直線的最小角度和最大角度,兩個(gè)參數(shù)必須大于等于0小于等于CV_PI(3.1415926535897932384626433832795),并且最小角度的數(shù)值要小于最大角度的數(shù)值。

該函數(shù)只能輸出直線的極坐標(biāo)表示形式的參數(shù)。

該函數(shù)只能判斷圖像中是否有直線,而不能判斷直線的起始位置

漸進(jìn)概率式霍夫變換

 漸進(jìn)概率式霍夫變換函數(shù)HoughLinesP()可以得到圖像中滿足條件的直線或者線段兩個(gè)端點(diǎn)的坐標(biāo),進(jìn)而確定直線或者線段的位置

void HoughLinesP( InputArray image, OutputArray lines,
                               double rho, double theta, int threshold,
                               double minLineLength = 0, double maxLineGap = 0 );
  • image:待檢測(cè)直線的原圖像,必須是CV_8C的單通道二值圖像。
  • lines:霍夫變換檢測(cè)到的直線輸出量,每一條直線都由4個(gè)參數(shù)進(jìn)行描述,分別是直線兩個(gè)端點(diǎn)的坐標(biāo)
  • rho:以像素為單位的距離分辨率,即距離 離散化時(shí)的單位長(zhǎng)度。
  • theta:以弧度為單位的角度分辨率,即夾角 離散化時(shí)的單位角度。
  • threshold:累加器的閾值,即參數(shù)空間中離散化后每個(gè)方格被通過(guò)的累計(jì)次數(shù)大于閾值時(shí)則被識(shí)別為直線,否則不被識(shí)別為直線。
  • minLineLength:直線的最小長(zhǎng)度,當(dāng)檢測(cè)直線的長(zhǎng)度小于該數(shù)值時(shí)將會(huì)被剔除。
  • maxLineGap:允許將同一行兩個(gè)點(diǎn)連接起來(lái)的最大距離。

該函數(shù)用于尋找圖像中滿足條件的直線或者線段兩個(gè)端點(diǎn)的坐標(biāo)。該函數(shù)的第一個(gè)參數(shù)為輸入圖像,必須是CV_8U的單通道二值圖像,如果需要檢測(cè)彩色圖像或者灰度圖像中是否存在直線,可以通過(guò)Canny()函數(shù)計(jì)算圖像的邊緣,并將邊緣檢測(cè)結(jié)果二值化后的圖像作為輸入圖像賦值給該參數(shù)。函數(shù)的第二個(gè)參數(shù)是圖像中直線或者線段兩個(gè)端點(diǎn)的坐標(biāo),是一個(gè)N×4的vector矩陣。Vec4i中前兩個(gè)元素分別是直線或者線段一個(gè)端點(diǎn)的x坐標(biāo)和y坐標(biāo),后兩個(gè)元素分別是直線或者線段另一個(gè)端點(diǎn)的x坐標(biāo)和y坐標(biāo)。函數(shù)第三個(gè)和第四個(gè)參數(shù)含義與HoughLines()函數(shù)的參數(shù)含義相同,都是霍夫變換中對(duì)參數(shù)空間坐標(biāo)軸進(jìn)行離散化后的單位長(zhǎng)度,這兩個(gè)參數(shù)的大小直接影響到檢測(cè)圖像中直線的精度,數(shù)值越小精度越高。第三個(gè)參數(shù)表示參數(shù)空間 軸的單位長(zhǎng)度,單位為像素,該參數(shù)常設(shè)置為1;第四個(gè)參數(shù)表示參數(shù)空間 軸的單位角度,單位為弧度,該函數(shù)常設(shè)置為CV_PI/180。函數(shù)第五個(gè)參數(shù)是累加器的閾值,表示參數(shù)空間中某個(gè)方格是否被認(rèn)定為直線的判定標(biāo)準(zhǔn),這個(gè)數(shù)值越大,對(duì)應(yīng)在原圖像中的直線越長(zhǎng),反之則越短。第六個(gè)參數(shù)是檢測(cè)直線或者線段的長(zhǎng)度,如果圖像中直線的長(zhǎng)度小于這個(gè)閾值,即使是直線也不會(huì)作為最終結(jié)果輸出。函數(shù)最后一個(gè)參數(shù)是鄰近兩個(gè)點(diǎn)連接的最大距離,這個(gè)參數(shù)主要能夠控制傾斜直線的檢測(cè)長(zhǎng)度,當(dāng)提取較長(zhǎng)的傾斜直線時(shí)該參數(shù)應(yīng)該具有較大取值。

該函數(shù)的最大特點(diǎn)是能夠直接給出圖像中直線或者線段兩個(gè)端點(diǎn)的像素坐標(biāo),因此可較精確的定位到圖像中直線的位置。

在含有坐標(biāo)點(diǎn)集合中尋找是否存在直線

void HoughLinesPointSet( InputArray _point, OutputArray _lines, int lines_max, int threshold,
                                      double min_rho, double max_rho, double rho_step,
                                      double min_theta, double max_theta, double theta_step );
  • _point:輸入點(diǎn)的集合,必須是平面內(nèi)的2D坐標(biāo),數(shù)據(jù)類(lèi)型必須是CV_32FC2或CV_32SC2。
  • _lines:在輸入點(diǎn)集合中可能存在的直線,每一條直線都具有三個(gè)參數(shù),分別是權(quán)重、直線距離坐標(biāo)原點(diǎn)的距離 和坐標(biāo)原點(diǎn)到直線的垂線與x軸的夾角 。
  • lines_max:檢測(cè)直線的最大數(shù)目。
  • threshold:累加器的閾值,即參數(shù)空間中離散化后每個(gè)方格被通過(guò)的累計(jì)次數(shù)大于閾值時(shí)則被識(shí)別為直線,否則不被識(shí)別為直線。
  • min_rho:檢測(cè)直線長(zhǎng)度的最小距離,以像素為單位。
  • max_rho:檢測(cè)直線長(zhǎng)度的最大距離,以像素為單位。
  • rho_step::以像素為單位的距離分辨率,即距離 離散化時(shí)的單位長(zhǎng)度。
  • min_theta:檢測(cè)直線的最小角度值,以弧度為單位。
  • max_theta:檢測(cè)直線的最大角度值,以弧度為單位。
  • theta_step:以弧度為單位的角度分辨率,即夾角 離散化時(shí)的單位角度。

該函數(shù)用于在含有坐標(biāo)的2D點(diǎn)的集合中尋找直線,函數(shù)檢測(cè)直線使用的方法是標(biāo)準(zhǔn)霍夫變換法。函數(shù)第一個(gè)參數(shù)是2D點(diǎn)集合中每個(gè)點(diǎn)的坐標(biāo),由于坐標(biāo)必須是CV_32F或者CV_32S類(lèi)型,因此可以將點(diǎn)集定義成vector< Point2f>或者vector< Point2f>類(lèi)型。函數(shù)的第二個(gè)參數(shù)是檢測(cè)到的輸入點(diǎn)集合中可能存在的直線,是一個(gè)1×N的矩陣,數(shù)據(jù)類(lèi)型為CV_64FC3,其中第1個(gè)數(shù)據(jù)表示該直線的權(quán)重,權(quán)重越大表示是直線的可靠性越高,第2個(gè)數(shù)據(jù)和第3個(gè)數(shù)據(jù)分別表示直線距離坐標(biāo)原點(diǎn)的距離 和坐標(biāo)原點(diǎn)到直線的垂線與x軸的夾角 ,矩陣中數(shù)據(jù)的順序是按照權(quán)重由大到小依次存放。函數(shù)第三個(gè)參數(shù)是檢測(cè)直線的數(shù)目,如果數(shù)目過(guò)大,檢測(cè)到的直線可能存在權(quán)重較小的情況。函數(shù)第四個(gè)參數(shù)是累加器的閾值,表示參數(shù)空間中某個(gè)方格是否被認(rèn)定為直線的判定標(biāo)準(zhǔn),這個(gè)數(shù)值越大,表示檢測(cè)的直線需要通過(guò)的點(diǎn)的數(shù)目越多。函數(shù)第五個(gè)、第六個(gè)參數(shù)是檢測(cè)直線長(zhǎng)度的取值范圍,單位為像素。函數(shù)第七個(gè)參數(shù)是霍夫變換算法中離散化時(shí)距離分辨率的大小,單位為像素。函數(shù)第八個(gè)、第九個(gè)參數(shù)是檢測(cè)直線經(jīng)過(guò)坐標(biāo)原點(diǎn)的垂線與x軸夾角的范圍,單位為弧度。函數(shù)第七個(gè)參數(shù)是霍夫變換算法中離散化時(shí)角度分辨率的大小,單位為弧度。

簡(jiǎn)單示例

//
// Created by smallflyfly on 2021/6/21.
//
 
#include "opencv2/opencv.hpp"
#include <iostream>
 
using namespace std;
using namespace cv;
 
 
void drawLine(const Mat &im, const vector<Vec2f> &lines) {
    Point p1, p2;
    cout << lines.size() << endl;
    for (int i = 0; i < lines.size(); ++i) {
        float rho = lines[i][0];
        float theta = lines[i][1];
        double a = cos(theta);
        double b = sin(theta);
        double x0 = a * rho, y0 = b * rho;
        double length = max(im.rows, im.cols);
 
        p1.x = cvRound(x0 + length * (-b));
        p1.y = cvRound(y0 + length * a);
 
        p2.x = cvRound(x0 - length * (-b));
        p2.y = cvRound(y0 - length * a);
 
        line(im, p1, p2, Scalar(255), 1);
    }
}
 
int  main() {
    Mat im = imread("road2.jfif");
    resize(im, im, Size(0, 0), 0.5, 0.5);
    cvtColor(im, im, CV_BGR2GRAY);
    imshow("im", im);
 
 
    Mat edge;
    Canny(im, edge, 200, 220, 3, false);
    threshold(edge, edge, 125, 255, THRESH_BINARY);
 
    imshow("edge", edge);
 
    // 標(biāo)準(zhǔn)霍夫變換
    vector<Vec2f> lines1, lines2;
    HoughLines(edge, lines1, 1, CV_PI/180, 150);
    HoughLines(edge, lines2, 1, CV_PI/180, 100);
 
    Mat im1, im2;
    im1 = im.clone();
    im2 = im.clone();
 
    drawLine(im1, lines1);
    drawLine(im2, lines2);
 
    imshow("im1", im1);
    imshow("im2", im2);
 
    // 漸進(jìn)概率式霍夫變換
    Mat im3, im4;
    im3 = im.clone();
    im4 = im.clone();
    vector<Vec4f> lines3, lines4;
    HoughLinesP(edge, lines3, 1, CV_PI/180, 150, 10, 300);
    HoughLinesP(edge, lines4, 1, CV_PI/180, 100, 10, 300);
 
    for (Vec4f & i : lines3) {
        line(im3, Point(i[0], i[1]), Point(i[2], i[3]),
             Scalar(255, 255, 255), 1);
    }
 
    for (Vec4f & i : lines4) {
        line(im4, Point(i[0], i[1]), Point(i[2], i[3]),
             Scalar(255, 255, 255), 1);
    }
 
    imshow("im3", im3);
    imshow("im4", im4);
 
 
    // 通過(guò)霍夫變換獲取點(diǎn)集合中的直線  采用標(biāo)準(zhǔn)霍夫變換
    const static float points[20][2] = {
            { 0.0f,   369.0f },{ 10.0f,  364.0f },{ 20.0f,  358.0f },{ 30.0f,  352.0f },
            { 40.0f,  346.0f },{ 50.0f,  341.0f },{ 60.0f,  335.0f },{ 70.0f,  329.0f },
            { 80.0f,  323.0f },{ 90.0f,  318.0f },{ 100.0f, 312.0f },{ 110.0f, 306.0f },
            { 120.0f, 300.0f },{ 130.0f, 295.0f },{ 140.0f, 289.0f },{ 150.0f, 284.0f },
            { 160.0f, 277.0f },{ 170.0f, 271.0f },{ 180.0f, 266.0f },{ 190.0f, 260.0f }
    };
    vector<Point2f> pts;
    for (auto point : points) {
        pts.emplace_back(point[0], point[1]);
    }
    vector<Vec3d> lines;
    HoughLinesPointSet(pts, lines, 20, 1, 0, 360, 1, 0,
                       CV_PI / 2, CV_PI / 180);
 
    for (int i = 0; i < lines.size(); ++i) {
        cout << "votes: " << lines[i][0] << ", "
        << "rho: " << lines[i][1] << ", "
        << "theta :" << lines[i][2] << endl;
    }
 
    waitKey(0);
    destroyAllWindows();
 
    return 0;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論