亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

Android基于OpenCV實現(xiàn)霍夫直線檢測

瀏覽:130日期:2022-09-18 08:09:51
目錄霍夫直線檢測點和線的對偶性極坐標(biāo)參數(shù)方程API操作效果霍夫直線檢測點和線的對偶性 圖像空間中的點,對應(yīng)霍夫空間中的直線 圖像空間中的直線,對應(yīng)霍夫空間中的點 共點的直線,在霍夫空間中對應(yīng)的點在一條直線上 共線的點,在霍夫空間中對應(yīng)的直線交于一點

Android基于OpenCV實現(xiàn)霍夫直線檢測

極坐標(biāo)參數(shù)方程

對于平面中的一條直線,在笛卡爾坐標(biāo)中,常見的有點斜式,兩點式兩種表示方法。然而在霍夫變換中,考慮的是另外一種表示方式:使用(r, theta)來表示一條直線。其中r為該直線到原點的距離,theta為該直線的垂線與x軸的夾角。如下圖所示:

Android基于OpenCV實現(xiàn)霍夫直線檢測

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

Android基于OpenCV實現(xiàn)霍夫直線檢測

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

由此可見,霍夫變換算法檢測圖像中的直線主要分為4個步驟

將參數(shù)空間的坐標(biāo)軸離散化,例如theta=0,10,20……, r=0.1,0.2,0.3…… 將圖像中每個非0像素通過映射關(guān)系求取在參數(shù)空間通過的方格。 統(tǒng)計參數(shù)空間內(nèi)每個方格出現(xiàn)的次數(shù),選取次數(shù)大于某一閾值的方格作為表示直線的方格。 將參數(shù)空間中表示直線的方格的參數(shù)作為圖像中直線的參數(shù)。

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

API

public static void HoughLines(Mat image, Mat lines, double rho, double theta, int threshold, double srn, double stn, double min_theta) 參數(shù)一:image,待檢測直線的原圖像,必須是CV_8U的單通道圖像. 參數(shù)二:lines,霍夫變換檢測到的直線輸出量,每一條直線都由兩個或者三個參數(shù)表示。第一個表示直線距離坐標(biāo)原點的距離 ,第二個表示坐標(biāo)原點到直線的垂線與x軸的夾角,若有第三個,則表示累加器的數(shù)值。

Android基于OpenCV實現(xiàn)霍夫直線檢測

參數(shù)三:rho,距離分辨率,以像素為單位,距離離散化時的單位長度 參數(shù)四:theta,角度分辨率,以弧度為單位,夾角離散化時的單位角度。 參數(shù)五:threshold,累加器的閾值,即參數(shù)空間中離散化后每個方格被通過的累計次數(shù)大于該閾值時將被識別為直線,否則不被識別為直線。 參數(shù)六:srn,對于多尺度霍夫變換算法中,該參數(shù)表示距離分辨率的除數(shù),粗略的累加器距離分辨率是第三個參數(shù)rho,精確的累加器分辨率是rho/srn。這個參數(shù)必須是非負數(shù),默認(rèn)參數(shù)為0。 參數(shù)七:stn,對于多尺度霍夫變換算法中,該參數(shù)表示角度分辨率的除數(shù),粗略的累加器距離分辨率是第四個參數(shù)rho,精確的累加器分辨率是rho/stn。這個參數(shù)必須是非負數(shù),默認(rèn)參數(shù)為0。當(dāng)這個參數(shù)與第六個參數(shù)srn同時為0時,此函數(shù)表示的是標(biāo)準(zhǔn)霍夫變換。 參數(shù)八:min_theta,檢測直線的最小角度,默認(rèn)參數(shù)為0。 參數(shù)九:max_theta,檢測直線的最大角度,默認(rèn)參數(shù)為CV_PI,是OpenCV 4中的默認(rèn)數(shù)值具體為3.1415926535897932384626433832795。

使用標(biāo)準(zhǔn)霍夫變換和多尺度霍夫變換函數(shù)HoughLins()提取直線時無法準(zhǔn)確知道圖像中直線或者線段的長度,只能得到圖像中是否存在符合要求的直線以及直線的極坐標(biāo)解析式。如果需要準(zhǔn)確的定位圖像中線段的位置,HoughLins()函數(shù)便無法滿足需求。但是OpenCV 4提供的漸進概率式霍夫變換函數(shù)HoughLinesP()可以得到圖像中滿足條件的直線或者線段兩個端點的坐標(biāo),進而確定直線或者線段的位置。

public static void HoughLinesP(Mat image, Mat lines, double rho, double theta, int threshold, double minLineLength, double maxLineGap)

參數(shù)一:image,待檢測直線的原圖像,必須是CV_8U的單通道圖像.

參數(shù)二:lines,輸出線段。每條線由4元素表示。如下,分別代表每個線段的兩個端點

Android基于OpenCV實現(xiàn)霍夫直線檢測

參數(shù)三:rho,距離分辨率,以像素為單位,距離離散化時的單位長度 參數(shù)四:theta,角度分辨率,以弧度為單位,夾角離散化時的單位角度。 參數(shù)五:threshold,累加器的閾值,即參數(shù)空間中離散化后每個方格被通過的累計次數(shù)大于該閾值時將被識別為直線,否則不被識別為直線。該累積數(shù)越大,則得到的直線可能就越長。 參數(shù)六:minLineLength,表示可以檢測的最小線段長度,根據(jù)實際需要進行設(shè)置。 參數(shù)七:maxLineGap,表示線段之間的最大間隔像素,假設(shè)5表示小于5個像素的兩個相鄰線段可以連接起來。操作

package cn.onlyloveyd.demo.uiimport android.os.Bundleimport androidx.appcompat.app.AppCompatActivityimport androidx.databinding.DataBindingUtilimport cn.onlyloveyd.demo.Rimport cn.onlyloveyd.demo.databinding.ActivityHoughLineBindingimport cn.onlyloveyd.demo.ext.showMatimport org.opencv.android.Utilsimport org.opencv.core.Matimport org.opencv.core.Pointimport org.opencv.core.Scalarimport org.opencv.imgproc.Imgprocimport kotlin.math.cosimport kotlin.math.roundToIntimport kotlin.math.sin/** * 霍夫直線檢測 * author: yidong * 2020/7/18 */class HoughLineDetectActivity : AppCompatActivity() { private lateinit var mBinding: ActivityHoughLineBinding private lateinit var mGray: Mat private lateinit var mEdge: Mat override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)mBinding = DataBindingUtil.setContentView(this, R.layout.activity_hough_line)mBinding.presenter = thismGray = Mat()mEdge = Mat()val bgr = Utils.loadResource(this, R.drawable.book)Imgproc.cvtColor(bgr, mGray, Imgproc.COLOR_BGR2GRAY)mBinding.ivLena.showMat(mGray)Imgproc.Canny(mGray, mEdge, 80.0, 150.0, 3, false) } override fun onDestroy() {mGray.release()mEdge.release()super.onDestroy() } fun doHoughLineDetect() {title = 'HoughLine'val lines = Mat()Imgproc.HoughLines(mEdge, lines, 1.0, Math.PI / 180.0, 150)val out = Mat.zeros(mGray.size(), mGray.type())val data = FloatArray(2)for (i in 0 until lines.rows()) { lines.get(i, 0, data) val rho = data[0] // 直線距離坐標(biāo)原點的距離 val theta = data[1] // 直線過坐標(biāo)原點垂線與x軸夾角 val a = cos(theta.toDouble()) //夾角的余弦值 val b = sin(theta.toDouble()) //夾角的正弦值 val x0 = a * rho //直線與過坐標(biāo)原點的垂線的交點 val y0 = b * rho val pt1 = Point() val pt2 = Point() pt1.x = (x0 + 1000 * (-b)).roundToInt().toDouble() pt1.y = (y0 + 1000 * (a)).roundToInt().toDouble() pt2.x = (x0 - 1000 * (-b)).roundToInt().toDouble() pt2.y = (y0 - 1000 * (a)).roundToInt().toDouble() Imgproc.line(out, pt1, pt2, Scalar(255.0, 255.0, 255.0), 2, Imgproc.LINE_AA, 0)}mBinding.ivResult.showMat(out)out.release()lines.release() } fun doHoughLinePDetect() {title = 'HoughLineP'val lines = Mat()Imgproc.HoughLinesP(mEdge, lines, 1.0, Math.PI / 180.0, 100, 50.0, 10.0)val out = Mat.zeros(mGray.size(), mGray.type())for (i in 0 until lines.rows()) { val data = IntArray(4) lines.get(i, 0, data) val pt1 = Point(data[0].toDouble(), data[1].toDouble()) val pt2 = Point(data[2].toDouble(), data[3].toDouble()) Imgproc.line(out, pt1, pt2, Scalar(255.0, 255.0, 255.0), 2, Imgproc.LINE_AA, 0)}mBinding.ivResult.showMat(out)out.release()lines.release() }}效果

Android基于OpenCV實現(xiàn)霍夫直線檢測

Android基于OpenCV實現(xiàn)霍夫直線檢測

以上就是Android基于OpenCV實現(xiàn)霍夫直線檢測的詳細內(nèi)容,更多關(guān)于Android OpenCV實現(xiàn)霍夫直線檢測的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 日韩精品视频免费观看 | 日本xxx护士与黑人 日本xxx免费视频 | 中国国产高清一级毛片 | 一区二区视频在线观看高清视频在线 | 国产麻豆精品在线观看 | 色天天天天综合男人的天堂 | 国产黄大片在线观看视频 | 亚洲综合涩| 免费观看欧美精品成人毛片能看的 | 在线永久免费观看的a站视频 | 国产男女性做爽歪歪爱视频 | 在线看片免费 | 一级免费黄色大片 | 国产福利一区二区三区视频在线 | 国产日韩视频 | 国产精品久久久久久久久久久不卡 | 伊人丁香| 男女啪啪免费观看网站 | 成人午夜小视频 | 香蕉视频 在线播放 | 一级美国片免费看 | 一区二区三区欧美视频 | 在线观看免费黄视频 | 欧美成人a级在线视频 | 亚洲精品视频一区 | 亚洲自偷自偷精品 | 欧美a级在线 | 国产精品久久婷婷六月丁香 | 看片在线观看免费 | 看真人视频a级毛片 | 黄色三级视频在线播放 | 久久99热精品免费观看无卡顿 | 国产91久久精品一区二区 | 久久99精品久久久久久三级 | 一级毛片免费看 | 亚洲人人视频 | 亚洲欧美一级久久精品 | 狼人青草久久网尹人 | 黄色小视频在线免费观看 | 欧美综合国产 | 欧美日韩国产一区二区三区不卡 |